From 166519fc4db8eec57ce17c4ab7b094d2252b65e1 Mon Sep 17 00:00:00 2001 From: Michael Vogel Date: Sun, 26 Jul 2015 14:41:34 +0200 Subject: [PATCH] Move the contact discovery into the background --- include/discover_poco.php | 32 ++++++++++++++++++++++++++------ include/poller.php | 4 ++++ include/socgraph.php | 22 +++++++++++----------- 3 files changed, 41 insertions(+), 17 deletions(-) diff --git a/include/discover_poco.php b/include/discover_poco.php index 7dbafcafde..68f483dab5 100644 --- a/include/discover_poco.php +++ b/include/discover_poco.php @@ -38,23 +38,26 @@ function discover_poco_run(&$argv, &$argc){ if(($argc > 2) && ($argv[1] == "dirsearch")) { $search = urldecode($argv[2]); - $searchmode = 1; + $mode = 1; + } elseif(($argc == 2) && ($argv[1] == "checkcontact")) { + $mode = 2; } elseif ($argc == 1) { $search = ""; - $searchmode = 0; + $mode = 0; } else die("Unknown or missing parameter ".$argv[1]."\n"); $lockpath = get_lockpath(); if ($lockpath != '') { - $pidfile = new pidfile($lockpath, 'discover_poco'.urlencode($search)); + $pidfile = new pidfile($lockpath, 'discover_poco'.$mode.urlencode($search)); if($pidfile->is_already_running()) { logger("discover_poco: Already running"); if ($pidfile->running_time() > 19*60) { $pidfile->kill(); logger("discover_poco: killed stale process"); // Calling a new instance - proc_run('php','include/discover_poco.php'); + if ($mode == 0) + proc_run('php','include/discover_poco.php'); } exit; } @@ -66,9 +69,11 @@ function discover_poco_run(&$argv, &$argc){ logger('start '.$search); - if (($search != "") and get_config('system','poco_local_search')) + if (($mode == 2) AND get_config('system','poco_completion')) + discover_users(); + elseif (($mode == 1) AND ($search != "") and get_config('system','poco_local_search')) discover_directory($search); - elseif (($search == "") and get_config('system','poco_discovery') > 0) + elseif (($mode == 0) AND ($search == "") and (get_config('system','poco_discovery') > 0)) poco_discover(); logger('end '.$search); @@ -76,6 +81,21 @@ function discover_poco_run(&$argv, &$argc){ return; } +function discover_users() { + $users = q("SELECT `url` FROM `gcontact` WHERE `updated` = '0000-00-00 00:00:00' AND + `last_contact` = '0000-00-00 00:00:00' AND `last_failure` = '0000-00-00 00:00:00' AND + `network` IN ('%s', '%s', '%s') ORDER BY rand() LIMIT 50", + dbesc(NETWORK_DFRN), dbesc(NETWORK_DIASPORA), dbesc(NETWORK_OSTATUS)); + + if (!$users) + return; + + foreach ($users AS $user) { + logger('Check user '.$user["url"]); + poco_last_updated($user["url"]); + } +} + function discover_directory($search) { $data = Cache::get("dirsearch:".$search); diff --git a/include/poller.php b/include/poller.php index 44ac94daa4..7cc1a28527 100644 --- a/include/poller.php +++ b/include/poller.php @@ -86,6 +86,10 @@ function poller_run(&$argv, &$argc){ proc_run('php',"include/discover_poco.php"); + // run the process to update locally stored global contacts in the background + + proc_run('php',"include/discover_poco.php", "checkcontact"); + // expire any expired accounts q("UPDATE user SET `account_expired` = 1 where `account_expired` = 0 diff --git a/include/socgraph.php b/include/socgraph.php index 0c78cfe235..53763626d6 100644 --- a/include/socgraph.php +++ b/include/socgraph.php @@ -266,17 +266,17 @@ function poco_check($profile_url, $name, $network, $profile_photo, $about, $loca poco_check_server($server_url, $network); // Fetch last update manually if it is enabled in the system - if (get_config('system','poco_completion') AND ($orig_updated == "0000-00-00 00:00:00") - AND poco_do_update($created, $updated, $last_failure, $last_contact) - AND poco_reachable($profile_url, $server_url, $network)) { - $last_updated = poco_last_updated($profile_url); - if ($last_updated) { - $updated = $last_updated; - $last_contact = datetime_convert(); - logger("Last updated for profile ".$profile_url.": ".$updated, LOGGER_DEBUG); - } else - $last_failure = datetime_convert(); - } + //if (get_config('system','poco_completion') AND ($orig_updated == "0000-00-00 00:00:00") + // AND poco_do_update($created, $updated, $last_failure, $last_contact) + // AND poco_reachable($profile_url, $server_url, $network)) { + // $last_updated = poco_last_updated($profile_url); + // if ($last_updated) { + // $updated = $last_updated; + // $last_contact = datetime_convert(); + // logger("Last updated for profile ".$profile_url.": ".$updated, LOGGER_DEBUG); + // } else + // $last_failure = datetime_convert(); + //} if(count($x)) { $gcid = $x[0]['id'];