Do some caching

This commit is contained in:
Michael Vogel 2015-07-19 21:29:24 +02:00
parent f3c83fb514
commit 3622f1a335
3 changed files with 64 additions and 51 deletions

View file

@ -100,21 +100,22 @@ function discover_directory($search) {
if ($exists[0]["last_contact"] < $exists[0]["last_failure"]) if ($exists[0]["last_contact"] < $exists[0]["last_failure"])
continue; continue;
$last_updated = poco_last_updated($jj->url); // Update the contact
$last_contact = datetime_convert(); poco_last_updated($jj->url);
if ($last_updated) {
logger("Mark profile ".$jj->url." as accessible (".$search.")", LOGGER_DEBUG);
q("UPDATE `gcontact` SET `updated` = '%s', `last_contact` = '%s' WHERE `nurl` = '%s'",
dbesc($last_updated), dbesc($last_contact), dbesc(normalise_link($jj->url)));
} else {
logger("Mark profile ".$jj->url." as unaccessible (".$search.")", LOGGER_DEBUG);
q("UPDATE `gcontact` SET `last_failure` = '%s' WHERE `nurl` = '%s'",
dbesc($last_contact), dbesc(normalise_link($jj->url)));
}
continue; continue;
} }
// Harcoded paths aren't so good. But in this case it is okay.
// First: We only will get Friendica contacts (which always are using this url schema)
// Second: There will be no further problems if we are doing a mistake
$server_url = preg_replace("=(https?://)(.*)/profile/(.*)=ism", "$1$2", $jj->url);
if ($server_url != $jj->url)
if (!poco_check_server($server_url)) {
logger("Friendica server ".$server_url." doesn't answer.", LOGGER_DEBUG);
continue;
}
logger("Friendica server ".$server_url." seems to be okay.", LOGGER_DEBUG);
logger("Check if profile ".$jj->url." is reachable (".$search.")", LOGGER_DEBUG); logger("Check if profile ".$jj->url." is reachable (".$search.")", LOGGER_DEBUG);
$data = probe_url($jj->url); $data = probe_url($jj->url);
if ($data["network"] == NETWORK_DFRN) { if ($data["network"] == NETWORK_DFRN) {

View file

@ -120,23 +120,12 @@ function onepoll_run(&$argv, &$argc){
dbesc($updated), dbesc($updated),
intval($contact['id']) intval($contact['id'])
); );
q("UPDATE `gcontact` SET `updated` = '%s', `last_contact` = '%s' WHERE `nurl` = '%s'",
dbesc($last_updated),
dbesc($updated),
dbesc($contact['nurl'])
);
} else { } else {
q("UPDATE `contact` SET `last-update` = '%s', `failure_update` = '%s' WHERE `id` = %d", q("UPDATE `contact` SET `last-update` = '%s', `failure_update` = '%s' WHERE `id` = %d",
dbesc($updated), dbesc($updated),
dbesc($updated), dbesc($updated),
intval($contact['id']) intval($contact['id'])
); );
q("UPDATE `gcontact` SET `last_failure` = '%s' WHERE `nurl` = '%s'",
dbesc($updated),
dbesc($contact['nurl'])
);
} }
} }
return; return;

View file

@ -238,6 +238,8 @@ function poco_check($profile_url, $name, $network, $profile_photo, $about, $loca
logger("profile-check generation: ".$generation." Network: ".$network." URL: ".$profile_url." name: ".$name." avatar: ".$profile_photo, LOGGER_DEBUG); logger("profile-check generation: ".$generation." Network: ".$network." URL: ".$profile_url." name: ".$name." avatar: ".$profile_photo, LOGGER_DEBUG);
poco_check_server($server_url, $network);
// Only fetch last update manually if it wasn't provided and enabled in the system // Only fetch last update manually if it wasn't provided and enabled in the system
if (get_config('system','poco_completion') AND ($orig_updated == "0000-00-00 00:00:00") AND poco_do_update($updated, $last_contact, $last_failure)) { if (get_config('system','poco_completion') AND ($orig_updated == "0000-00-00 00:00:00") AND poco_do_update($updated, $last_contact, $last_failure)) {
$last_updated = poco_last_updated($profile_url); $last_updated = poco_last_updated($profile_url);
@ -245,24 +247,9 @@ function poco_check($profile_url, $name, $network, $profile_photo, $about, $loca
$updated = $last_updated; $updated = $last_updated;
$last_contact = datetime_convert(); $last_contact = datetime_convert();
logger("Last updated for profile ".$profile_url.": ".$updated, LOGGER_DEBUG); logger("Last updated for profile ".$profile_url.": ".$updated, LOGGER_DEBUG);
} else
if (count($x))
q("UPDATE `gcontact` SET `last_contact` = '%s' WHERE `nurl` = '%s'", dbesc($last_contact), dbesc(normalise_link($profile_url)));
} else {
$last_failure = datetime_convert(); $last_failure = datetime_convert();
if (count($x))
q("UPDATE `gcontact` SET `last_failure` = '%s' WHERE `nurl` = '%s'", dbesc($last_failure), dbesc(normalise_link($profile_url)));
} }
}
poco_check_server($server_url, $network);
// Test - remove before flight
//if ($last_contact > $last_failure)
// q("UPDATE `gserver` SET `last_contact` = '%s' WHERE `nurl` = '%s'", dbesc($last_contact), dbesc(normalise_link($server_url)));
//else
// q("UPDATE `gserver` SET `last_failure` = '%s' WHERE `nurl` = '%s'", dbesc($last_failure), dbesc(normalise_link($server_url)));
if(count($x)) { if(count($x)) {
$gcid = $x[0]['id']; $gcid = $x[0]['id'];
@ -366,17 +353,53 @@ function poco_check($profile_url, $name, $network, $profile_photo, $about, $loca
} }
function poco_last_updated($profile) { function poco_last_updated($profile) {
$gcontacts = q("SELECT * FROM `gcontact` WHERE `nurl` = '%s'",
dbesc(normalise_link($profile)));
if ($gcontacts[0]["server_url"] != "") {
$servers = q("SELECT * FROM `gserver` WHERE `nurl` = '%s' AND `last_contact` < `last_failure`", dbesc(normalise_link($gcontacts[0]["server_url"])));
if ($servers)
return false;
}
$data = probe_url($profile); $data = probe_url($profile);
if (($data["poll"] == "") OR ($data["network"] == NETWORK_FEED)) if (($data["poll"] == "") OR ($data["network"] == NETWORK_FEED)) {
q("UPDATE `gcontact` SET `last_failure` = '%s' WHERE `nurl` = '%s'",
dbesc(datetime_convert()), dbesc(normalise_link($profile)));
return false; return false;
}
if (($data["name"] != "") AND ($data["name"] != $gcontacts[0]["name"]))
q("UPDATE `gcontact` SET `name` = '%s' WHERE `nurl` = '%s'",
dbesc($data["name"]), dbesc(normalise_link($profile)));
if (($data["addr"] != "") AND ($data["addr"] != $gcontacts[0]["connect"]))
q("UPDATE `gcontact` SET `connect` = '%s' WHERE `nurl` = '%s'",
dbesc($data["addr"]), dbesc(normalise_link($profile)));
if (($data["photo"] != "") AND ($data["photo"] != $gcontacts[0]["photo"]))
q("UPDATE `gcontact` SET `photo` = '%s' WHERE `nurl` = '%s'",
dbesc($data["photo"]), dbesc(normalise_link($profile)));
if (($data["baseurl"] != "") AND ($data["baseurl"] != $gcontacts[0]["server_url"]))
q("UPDATE `gcontact` SET `server_url` = '%s' WHERE `nurl` = '%s'",
dbesc($data["baseurl"]), dbesc(normalise_link($profile)));
if ($data["baseurl"] != "")
poco_check_server($data["baseurl"], $data["network"]);
// To-Do: Use noscrape // To-Do: Use noscrape
$feedret = z_fetch_url($data["poll"]); $feedret = z_fetch_url($data["poll"]);
if (!$feedret["success"]) if (!$feedret["success"]) {
q("UPDATE `gcontact` SET `last_failure` = '%s' WHERE `nurl` = '%s'",
dbesc(datetime_convert()), dbesc(normalise_link($profile)));
return false; return false;
}
$doc = new DOMDocument(); $doc = new DOMDocument();
@$doc->loadXML($feedret["body"]); @$doc->loadXML($feedret["body"]);
@ -404,6 +427,9 @@ function poco_last_updated($profile) {
if ($xpath->query('/atom:feed')->length > 0) if ($xpath->query('/atom:feed')->length > 0)
$last_updated = "0000-00-00 00:00:00"; $last_updated = "0000-00-00 00:00:00";
q("UPDATE `gcontact` SET `updated` = '%s', `last_contact` = '%s' WHERE `nurl` = '%s'",
dbesc($last_updated), dbesc(datetime_convert()), dbesc(normalise_link($profile)));
return($last_updated); return($last_updated);
} }
@ -430,11 +456,11 @@ function poco_do_update($updated, $last_contact, $last_failure) {
return false; return false;
// If the last contact time was more than a week ago, then only try once a week // If the last contact time was more than a week ago, then only try once a week
if (($now - $contact_time) > (60 * 60 * 24 * 7) AND ($now - $failure_time) < (60 * 60 * 24 * 7)) if ((($now - $contact_time) > (60 * 60 * 24 * 7)) AND (($now - $failure_time) < (60 * 60 * 24 * 7)))
return false; return false;
// If the last contact time was more than a month ago, then only try once a month // If the last contact time was more than a month ago, then only try once a month - but only if there ever was a contact time
if (($now - $contact_time) > (60 * 60 * 24 * 30) AND ($now - $failure_time) < (60 * 60 * 24 * 30)) if (($contact_time > 0) AND (($now - $contact_time) > (60 * 60 * 24 * 30)) AND (($now - $failure_time) < (60 * 60 * 24 * 30)))
return false; return false;
return true; return true;
@ -452,7 +478,7 @@ function poco_to_boolean($val) {
function poco_check_server($server_url, $network = "") { function poco_check_server($server_url, $network = "") {
if ($server_url == "") if ($server_url == "")
return; return false;
$servers = q("SELECT * FROM `gserver` WHERE `nurl` = '%s'", dbesc(normalise_link($server_url))); $servers = q("SELECT * FROM `gserver` WHERE `nurl` = '%s'", dbesc(normalise_link($server_url)));
if ($servers) { if ($servers) {
@ -470,12 +496,8 @@ function poco_check_server($server_url, $network = "") {
$info = $servers[0]["info"]; $info = $servers[0]["info"];
$register_policy = $servers[0]["register_policy"]; $register_policy = $servers[0]["register_policy"];
// Only check the server once a week if (!poco_do_update("", $last_contact, $last_failure))
if (strtotime(datetime_convert()) < (strtotime($last_contact) + (60 * 60 * 24 * 7))) return ($last_contact >= $last_failure);
return;
if (strtotime(datetime_convert()) < (strtotime($last_failure) + (60 * 60 * 24 * 7)))
return;
} else { } else {
$poco = ""; $poco = "";
$noscrape = ""; $noscrape = "";
@ -668,6 +690,7 @@ function poco_check_server($server_url, $network = "") {
dbesc($platform), dbesc($platform),
dbesc(datetime_convert()) dbesc(datetime_convert())
); );
return $failure;
} }
function poco_contact_from_body($body, $created, $cid, $uid) { function poco_contact_from_body($body, $created, $cid, $uid) {