Skip to content

Commit

Permalink
Debug log what happens during reminders processing
Browse files Browse the repository at this point in the history
Signed-off-by: Christoph Wurst <christoph@winzerhof-wurst.at>
  • Loading branch information
ChristophWurst committed Jun 1, 2022
1 parent 0109249 commit 58f7a15
Show file tree
Hide file tree
Showing 2 changed files with 46 additions and 25 deletions.
41 changes: 28 additions & 13 deletions apps/dav/lib/CalDAV/Reminder/ReminderService.php
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@
use OCP\IGroupManager;
use OCP\IUser;
use OCP\IUserManager;
use Psr\Log\LoggerInterface;
use Sabre\VObject;
use Sabre\VObject\Component\VAlarm;
use Sabre\VObject\Component\VEvent;
Expand All @@ -46,6 +47,7 @@
use Sabre\VObject\Recur\EventIterator;
use Sabre\VObject\Recur\MaxInstancesExceededException;
use Sabre\VObject\Recur\NoInstancesException;
use function count;
use function strcasecmp;

class ReminderService {
Expand All @@ -71,6 +73,9 @@ class ReminderService {
/** @var IConfig */
private $config;

/** @var LoggerInterface */
private $logger;

public const REMINDER_TYPE_EMAIL = 'EMAIL';
public const REMINDER_TYPE_DISPLAY = 'DISPLAY';
public const REMINDER_TYPE_AUDIO = 'AUDIO';
Expand All @@ -86,31 +91,22 @@ class ReminderService {
self::REMINDER_TYPE_AUDIO
];

/**
* ReminderService constructor.
*
* @param Backend $backend
* @param NotificationProviderManager $notificationProviderManager
* @param IUserManager $userManager
* @param IGroupManager $groupManager
* @param CalDavBackend $caldavBackend
* @param ITimeFactory $timeFactory
* @param IConfig $config
*/
public function __construct(Backend $backend,
NotificationProviderManager $notificationProviderManager,
IUserManager $userManager,
IGroupManager $groupManager,
CalDavBackend $caldavBackend,
ITimeFactory $timeFactory,
IConfig $config) {
IConfig $config,
LoggerInterface $logger) {
$this->backend = $backend;
$this->notificationProviderManager = $notificationProviderManager;
$this->userManager = $userManager;
$this->groupManager = $groupManager;
$this->caldavBackend = $caldavBackend;
$this->timeFactory = $timeFactory;
$this->config = $config;
$this->logger = $logger;
}

/**
Expand All @@ -119,8 +115,11 @@ public function __construct(Backend $backend,
* @throws NotificationProvider\ProviderNotAvailableException
* @throws NotificationTypeDoesNotExistException
*/
public function processReminders():void {
public function processReminders() :void {
$reminders = $this->backend->getRemindersToProcess();
$this->logger->debug('{numReminders} reminders to process', [
'numReminders' => count($reminders),
]);

foreach ($reminders as $reminder) {
$calendarData = is_resource($reminder['calendardata'])
Expand All @@ -133,22 +132,34 @@ public function processReminders():void {

$vcalendar = $this->parseCalendarData($calendarData);
if (!$vcalendar) {
$this->logger->debug('Reminder {id} does not belong to a valid calendar', [
'id' => $reminder['id'],
]);
$this->backend->removeReminder($reminder['id']);
continue;
}

$vevent = $this->getVEventByRecurrenceId($vcalendar, $reminder['recurrence_id'], $reminder['is_recurrence_exception']);
if (!$vevent) {
$this->logger->debug('Reminder {id} does not belong to a valid event', [
'id' => $reminder['id'],
]);
$this->backend->removeReminder($reminder['id']);
continue;
}

if ($this->wasEventCancelled($vevent)) {
$this->logger->debug('Reminder {id} belongs to a cancelled event', [
'id' => $reminder['id'],
]);
$this->deleteOrProcessNext($reminder, $vevent);
continue;
}

if (!$this->notificationProviderManager->hasProvider($reminder['type'])) {
$this->logger->debug('Reminder {id} does not belong to a valid notification provider', [
'id' => $reminder['id'],
]);
$this->deleteOrProcessNext($reminder, $vevent);
continue;
}
Expand All @@ -164,6 +175,10 @@ public function processReminders():void {
$users[] = $user;
}

$this->logger->debug('Reminder {id} will be sent to {numUsers} users', [
'id' => $reminder['id'],
'numUsers' => count($users),
]);
$notificationProvider = $this->notificationProviderManager->getProvider($reminder['type']);
$notificationProvider->send($vevent, $reminder['displayname'], $users);

Expand Down
30 changes: 18 additions & 12 deletions apps/dav/tests/unit/CalDAV/Reminder/ReminderServiceTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -39,37 +39,39 @@
use OCP\IUser;
use OCP\IUserManager;
use OCP\IUserSession;
use PHPUnit\Framework\MockObject\MockObject;
use Psr\Log\LoggerInterface;
use Test\TestCase;

class ReminderServiceTest extends TestCase {

/** @var Backend|\PHPUnit\Framework\MockObject\MockObject */
/** @var Backend|MockObject */
private $backend;

/** @var NotificationProviderManager|\PHPUnit\Framework\MockObject\MockObject */
/** @var NotificationProviderManager|MockObject */
private $notificationProviderManager;

/** @var IUserManager|\PHPUnit\Framework\MockObject\MockObject */
/** @var IUserManager|MockObject */
private $userManager;

/** @var IGroupManager|\PHPUnit\Framework\MockObject\MockObject*/
/** @var IGroupManager|MockObject*/
private $groupManager;

/** @var IUserSession|\PHPUnit\Framework\MockObject\MockObject */
private $userSession;

/** @var CalDavBackend|\PHPUnit\Framework\MockObject\MockObject */
/** @var CalDavBackend|MockObject */
private $caldavBackend;

/** @var ITimeFactory|\PHPUnit\Framework\MockObject\MockObject */
/** @var ITimeFactory|MockObject */
private $timeFactory;

/** @var IConfig|\PHPUnit\Framework\MockObject\MockObject */
/** @var IConfig|MockObject */
private $config;

/** @var ReminderService */
private $reminderService;

/** @var MockObject|LoggerInterface */
private $logger;

public const CALENDAR_DATA = <<<EOD
BEGIN:VCALENDAR
PRODID:-//Nextcloud calendar v1.6.4
Expand Down Expand Up @@ -199,16 +201,20 @@ protected function setUp(): void {
$this->caldavBackend = $this->createMock(CalDavBackend::class);
$this->timeFactory = $this->createMock(ITimeFactory::class);
$this->config = $this->createMock(IConfig::class);
$this->logger = $this->createMock(LoggerInterface::class);

$this->caldavBackend->method('getShares')->willReturn([]);

$this->reminderService = new ReminderService($this->backend,
$this->reminderService = new ReminderService(
$this->backend,
$this->notificationProviderManager,
$this->userManager,
$this->groupManager,
$this->caldavBackend,
$this->timeFactory,
$this->config);
$this->config,
$this->logger,
);
}

public function testOnCalendarObjectDelete():void {
Expand Down

0 comments on commit 58f7a15

Please sign in to comment.