From 9c4a53e38027f6a8649763507ed395fde1e0cca9 Mon Sep 17 00:00:00 2001
From: Michael <heluecht@pirati.ca>
Date: Sat, 4 Feb 2017 16:16:15 +0000
Subject: [PATCH] Optimized query for nodeinfo, better way to analyze posting
 problems with DFRN

---
 include/delivery.php |  2 +-
 include/dfrn.php     | 20 ++++++++++----------
 include/queue.php    | 43 +++++++++++++++++++++++--------------------
 mod/nodeinfo.php     |  7 ++++---
 4 files changed, 38 insertions(+), 34 deletions(-)

diff --git a/include/delivery.php b/include/delivery.php
index 5000a1edb9..8ccb19cedc 100644
--- a/include/delivery.php
+++ b/include/delivery.php
@@ -398,7 +398,7 @@ function delivery_run(&$argv, &$argc){
 
 				logger('notifier: dfrn_delivery to '.$contact["url"].' with guid '.$target_item["guid"].' returns '.$deliver_status);
 
-				if ($deliver_status == (-1)) {
+				if ($deliver_status < 0) {
 					logger('notifier: delivery failed: queuing message');
 					add_to_queue($contact['id'],NETWORK_DFRN,$atom);
 
diff --git a/include/dfrn.php b/include/dfrn.php
index fbf6aea561..30057001cd 100644
--- a/include/dfrn.php
+++ b/include/dfrn.php
@@ -916,14 +916,14 @@ class dfrn {
 		$ret = z_fetch_url($url);
 
 		if ($ret['errno'] == CURLE_OPERATION_TIMEDOUT) {
-			return(-1); // timed out
+			return -2; // timed out
 		}
 
 		$xml = $ret['body'];
 
 		$curl_stat = $a->get_curl_code();
 		if(! $curl_stat)
-			return(-1); // timed out
+			return -3; // timed out
 
 		logger('dfrn_deliver: ' . $xml, LOGGER_DATA);
 
@@ -1023,24 +1023,24 @@ class dfrn {
 						$key = Crypto::createNewRandomKey();
 					} catch (CryptoTestFailed $ex) {
 						logger('Cannot safely create a key');
-						return -1;
+						return -4;
 					} catch (CannotPerformOperation $ex) {
 						logger('Cannot safely create a key');
-						return -1;
+						return -5;
 					}
 					try {
 						$data = Crypto::encrypt($postvars['data'], $key);
 					} catch (CryptoTestFailed $ex) {
 						logger('Cannot safely perform encryption');
-						return -1;
+						return -6;
 					} catch (CannotPerformOperation $ex) {
 						logger('Cannot safely perform encryption');
-						return -1;
+						return -7;
 					}
 					break;
 				default:
 					logger("rino: invalid requested verision '$rino_remote_version'");
-					return -1;
+					return -8;
 			}
 
 			$postvars['rino'] = $rino_remote_version;
@@ -1074,16 +1074,16 @@ class dfrn {
 
 		logger('dfrn_deliver: ' . "SENDING: " . print_r($postvars,true), LOGGER_DATA);
 
-		$xml = post_url($contact['notify'],$postvars);
+		$xml = post_url($contact['notify'], $postvars);
 
 		logger('dfrn_deliver: ' . "RECEIVED: " . $xml, LOGGER_DATA);
 
 		$curl_stat = $a->get_curl_code();
 		if((! $curl_stat) || (! strlen($xml)))
-			return(-1); // timed out
+			return -9; // timed out
 
 		if(($curl_stat == 503) && (stristr($a->get_curl_headers(),'retry-after')))
-			return(-1);
+			return -10;
 
 		if(strpos($xml,'<?xml') === false) {
 			logger('dfrn_deliver: phase 2: no valid XML returned');
diff --git a/include/queue.php b/include/queue.php
index 3ccceb4750..7e2657fa54 100644
--- a/include/queue.php
+++ b/include/queue.php
@@ -38,10 +38,11 @@ function queue_run(&$argv, &$argc){
 
 	load_hooks();
 
-	if($argc > 1)
+	if ($argc > 1) {
 		$queue_id = intval($argv[1]);
-	else
+	} else {
 		$queue_id = 0;
+	}
 
 	$cachekey_deadguy = 'queue_run:deadguy:';
 	$cachekey_server = 'queue_run:server:';
@@ -64,7 +65,7 @@ function queue_run(&$argv, &$argc){
 			foreach ($r as $rr) {
 				logger('queue: deliverq');
 				proc_run(PRIORITY_HIGH,'include/delivery.php',$rr['cmd'],$rr['item'],$rr['contact']);
-				if($interval) {
+				if ($interval) {
 					time_sleep_until(microtime(true) + (float) $interval);
 				}
 			}
@@ -111,10 +112,10 @@ function queue_run(&$argv, &$argc){
 		// queue_predeliver hooks may have changed the queue db details,
 		// so check again if this entry still needs processing
 
-		if($queue_id)
+		if ($queue_id) {
 			$qi = q("SELECT * FROM `queue` WHERE `id` = %d LIMIT 1",
 				intval($queue_id));
-		elseif (get_config("system", "worker")) {
+		} elseif (get_config("system", "worker")) {
 			logger('Call queue for id '.$q_item['id']);
 			proc_run(PRIORITY_LOW, "include/queue.php", $q_item['id']);
 			continue;
@@ -122,8 +123,9 @@ function queue_run(&$argv, &$argc){
 			$qi = q("SELECT * FROM `queue` WHERE `id` = %d AND `last` < UTC_TIMESTAMP() - INTERVAL 15 MINUTE ",
 				intval($q_item['id']));
 
-		if(! count($qi))
+		if (!dbm::is_result($qi)) {
 			continue;
+		}
 
 
 		$c = q("SELECT * FROM `contact` WHERE `id` = %d LIMIT 1",
@@ -182,36 +184,37 @@ function queue_run(&$argv, &$argc){
 				logger('queue: dfrndelivery: item '.$q_item['id'].' for '.$contact['name'].' <'.$contact['url'].'>');
 				$deliver_status = dfrn::deliver($owner,$contact,$data);
 
-				if($deliver_status == (-1)) {
+				if ($deliver_status < 0) {
 					update_queue_time($q_item['id']);
 					Cache::set($cachekey_deadguy.$contact['notify'], true, CACHE_QUARTER_HOUR);
-				} else
+				} else {
 					remove_queue_item($q_item['id']);
-
+				}
 				break;
 			case NETWORK_OSTATUS:
-				if($contact['notify']) {
+				if ($contact['notify']) {
 					logger('queue: slapdelivery: item '.$q_item['id'].' for '.$contact['name'].' <'.$contact['url'].'>');
 					$deliver_status = slapper($owner,$contact['notify'],$data);
 
-					if($deliver_status == (-1)) {
+					if ($deliver_status == (-1)) {
 						update_queue_time($q_item['id']);
 						Cache::set($cachekey_deadguy.$contact['notify'], true, CACHE_QUARTER_HOUR);
-					} else
+					} else {
 						remove_queue_item($q_item['id']);
+					}
 				}
 				break;
 			case NETWORK_DIASPORA:
-				if($contact['notify']) {
+				if ($contact['notify']) {
 					logger('queue: diaspora_delivery: item '.$q_item['id'].' for '.$contact['name'].' <'.$contact['url'].'>');
 					$deliver_status = Diaspora::transmit($owner,$contact,$data,$public,true);
 
-					if($deliver_status == (-1)) {
+					if ($deliver_status == (-1)) {
 						update_queue_time($q_item['id']);
 						Cache::set($cachekey_deadguy.$contact['notify'], true, CACHE_QUARTER_HOUR);
-					} else
+					} else {
 						remove_queue_item($q_item['id']);
-
+					}
 				}
 				break;
 
@@ -219,15 +222,15 @@ function queue_run(&$argv, &$argc){
 				$params = array('owner' => $owner, 'contact' => $contact, 'queue' => $q_item, 'result' => false);
 				call_hooks('queue_deliver', $a, $params);
 
-				if($params['result'])
+				if ($params['result']) {
 					remove_queue_item($q_item['id']);
-				else
+				} else {
 					update_queue_time($q_item['id']);
-
+				}
 				break;
 
 		}
-		logger('Deliver status '.$deliver_status.' for item '.$q_item['id'].' to '.$contact['name'].' <'.$contact['url'].'>');
+		logger('Deliver status '.(int)$deliver_status.' for item '.$q_item['id'].' to '.$contact['name'].' <'.$contact['url'].'>');
 	}
 
 	return;
diff --git a/mod/nodeinfo.php b/mod/nodeinfo.php
index e084b25da3..6f20494757 100644
--- a/mod/nodeinfo.php
+++ b/mod/nodeinfo.php
@@ -228,9 +228,10 @@ function nodeinfo_cron() {
 
         logger("local_posts: ".$local_posts, LOGGER_DEBUG);
 
-	$posts = qu("SELECT COUNT(*) AS `local_comments` FROM `item`
-			INNER JOIN `contact` ON `contact`.`id` = `item`.`contact-id`
-			WHERE `contact`.`self` and `item`.`id` != `item`.`parent` AND `item`.`network` IN ('%s', '%s', '%s')",
+	$posts = qu("SELECT COUNT(*) FROM `contact`
+			INNER JOIN `item` ON `item`.`contact-id` = `contact`.`id` AND `item`.`uid` = `contact`.`uid` AND
+				`item`.`id` != `item`.`parent` AND `item`.`network` IN ('%s', '%s', '%s')
+			WHERE `contact`.`self`",
 			dbesc(NETWORK_OSTATUS), dbesc(NETWORK_DIASPORA), dbesc(NETWORK_DFRN));
 
 	if (!is_array($posts))
-- 
2.39.5