The delivery counter now counts only successful deliveries

This commit is contained in:
Michael 2019-06-01 06:54:47 +00:00
parent f0de19dd8a
commit ecf809c7ae
3 changed files with 38 additions and 72 deletions

View file

@ -178,18 +178,10 @@ class Delivery extends BaseObject
case Protocol::DFRN:
self::deliverDFRN($cmd, $contact, $owner, $items, $target_item, $public_message, $top_level, $followup);
if (in_array($cmd, [Delivery::POST, Delivery::COMMENT])) {
Model\ItemDeliveryData::incrementQueueDone($target_id);
}
break;
case Protocol::DIASPORA:
self::deliverDiaspora($cmd, $contact, $owner, $items, $target_item, $public_message, $top_level, $followup);
if (in_array($cmd, [Delivery::POST, Delivery::COMMENT])) {
Model\ItemDeliveryData::incrementQueueDone($target_id);
}
break;
case Protocol::OSTATUS:
@ -321,21 +313,19 @@ class Delivery extends BaseObject
Logger::info('DFRN Delivery', ['cmd' => $cmd, 'url' => $contact['url'], 'guid' => defaults($target_item, 'guid', $target_item['id']), 'return' => $deliver_status]);
if ($deliver_status < 0) {
Logger::info('Delivery failed: defer message', ['id' => defaults($target_item, 'guid', $target_item['id'])]);
Worker::defer();
}
if (($deliver_status >= 200) && ($deliver_status <= 299)) {
// We successfully delivered a message, the contact is alive
Model\Contact::unmarkForArchival($contact);
if (in_array($cmd, [Delivery::POST, Delivery::COMMENT])) {
Model\ItemDeliveryData::incrementQueueDone($target_item['id']);
}
} else {
// The message could not be delivered. We mark the contact as "dead"
Model\Contact::markForArchival($contact);
// Transmit via Diaspora when all other methods (legacy DFRN and new one) are failing.
// This is a fallback for systems that don't know the new methods.
self::deliverDiaspora($cmd, $contact, $owner, $items, $target_item, $public_message, $top_level, $followup);
Logger::info('Delivery failed: defer message', ['id' => defaults($target_item, 'guid', $target_item['id'])]);
Worker::defer();
}
}
@ -380,32 +370,49 @@ class Delivery extends BaseObject
if (!$contact['pubkey'] && !$public_message) {
return;
}
if ($cmd == self::RELOCATION) {
Diaspora::sendAccountMigration($owner, $contact, $owner['uid']);
return;
$deliver_status = Diaspora::sendAccountMigration($owner, $contact, $owner['uid']);
} elseif ($target_item['deleted'] && (($target_item['uri'] === $target_item['parent-uri']) || $followup)) {
// top-level retraction
Logger::log('diaspora retract: ' . $loc);
Diaspora::sendRetraction($target_item, $owner, $contact, $public_message);
return;
$deliver_status = Diaspora::sendRetraction($target_item, $owner, $contact, $public_message);
} elseif ($followup) {
// send comments and likes to owner to relay
Logger::log('diaspora followup: ' . $loc);
Diaspora::sendFollowup($target_item, $owner, $contact, $public_message);
return;
$deliver_status = Diaspora::sendFollowup($target_item, $owner, $contact, $public_message);
} elseif ($target_item['uri'] !== $target_item['parent-uri']) {
// we are the relay - send comments, likes and relayable_retractions to our conversants
Logger::log('diaspora relay: ' . $loc);
Diaspora::sendRelay($target_item, $owner, $contact, $public_message);
return;
$deliver_status = Diaspora::sendRelay($target_item, $owner, $contact, $public_message);
} elseif ($top_level && !$walltowall) {
// currently no workable solution for sending walltowall
Logger::log('diaspora status: ' . $loc);
Diaspora::sendStatus($target_item, $owner, $contact, $public_message);
$deliver_status = Diaspora::sendStatus($target_item, $owner, $contact, $public_message);
} else {
Logger::log('Unknown mode ' . $cmd . ' for ' . $loc);
return;
}
Logger::log('Unknown mode ' . $cmd . ' for ' . $loc);
if (($deliver_status >= 200) && ($deliver_status <= 299)) {
// We successfully delivered a message, the contact is alive
Model\Contact::unmarkForArchival($contact);
if (in_array($cmd, [Delivery::POST, Delivery::COMMENT])) {
Model\ItemDeliveryData::incrementQueueDone($target_item['id']);
}
} else {
// The message could not be delivered. We mark the contact as "dead"
Model\Contact::markForArchival($contact);
if (!empty($contact['contact-type']) && ($contact['contact-type'] != Model\Contact::TYPE_RELAY)) {
Logger::info('Delivery failed: defer message', ['id' => defaults($target_item, 'guid', $target_item['id'])]);
// defer message for redelivery
Worker::defer();
} elseif (in_array($cmd, [Delivery::POST, Delivery::COMMENT])) {
Model\ItemDeliveryData::incrementQueueDone($target_item['id']);
}
}
}
/**