Skip to content

Commit ca45e6a

Browse files
Merge pull request #28703 from nextcloud/enhancement/caldav-reminders-logging
Debug log what happens during reminders processing
2 parents 1d1b9d9 + 58f7a15 commit ca45e6a

File tree

2 files changed

+46
-25
lines changed

2 files changed

+46
-25
lines changed

apps/dav/lib/CalDAV/Reminder/ReminderService.php

Lines changed: 28 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@
3838
use OCP\IGroupManager;
3939
use OCP\IUser;
4040
use OCP\IUserManager;
41+
use Psr\Log\LoggerInterface;
4142
use Sabre\VObject;
4243
use Sabre\VObject\Component\VAlarm;
4344
use Sabre\VObject\Component\VEvent;
@@ -46,6 +47,7 @@
4647
use Sabre\VObject\Recur\EventIterator;
4748
use Sabre\VObject\Recur\MaxInstancesExceededException;
4849
use Sabre\VObject\Recur\NoInstancesException;
50+
use function count;
4951
use function strcasecmp;
5052

5153
class ReminderService {
@@ -71,6 +73,9 @@ class ReminderService {
7173
/** @var IConfig */
7274
private $config;
7375

76+
/** @var LoggerInterface */
77+
private $logger;
78+
7479
public const REMINDER_TYPE_EMAIL = 'EMAIL';
7580
public const REMINDER_TYPE_DISPLAY = 'DISPLAY';
7681
public const REMINDER_TYPE_AUDIO = 'AUDIO';
@@ -86,31 +91,22 @@ class ReminderService {
8691
self::REMINDER_TYPE_AUDIO
8792
];
8893

89-
/**
90-
* ReminderService constructor.
91-
*
92-
* @param Backend $backend
93-
* @param NotificationProviderManager $notificationProviderManager
94-
* @param IUserManager $userManager
95-
* @param IGroupManager $groupManager
96-
* @param CalDavBackend $caldavBackend
97-
* @param ITimeFactory $timeFactory
98-
* @param IConfig $config
99-
*/
10094
public function __construct(Backend $backend,
10195
NotificationProviderManager $notificationProviderManager,
10296
IUserManager $userManager,
10397
IGroupManager $groupManager,
10498
CalDavBackend $caldavBackend,
10599
ITimeFactory $timeFactory,
106-
IConfig $config) {
100+
IConfig $config,
101+
LoggerInterface $logger) {
107102
$this->backend = $backend;
108103
$this->notificationProviderManager = $notificationProviderManager;
109104
$this->userManager = $userManager;
110105
$this->groupManager = $groupManager;
111106
$this->caldavBackend = $caldavBackend;
112107
$this->timeFactory = $timeFactory;
113108
$this->config = $config;
109+
$this->logger = $logger;
114110
}
115111

116112
/**
@@ -119,8 +115,11 @@ public function __construct(Backend $backend,
119115
* @throws NotificationProvider\ProviderNotAvailableException
120116
* @throws NotificationTypeDoesNotExistException
121117
*/
122-
public function processReminders():void {
118+
public function processReminders() :void {
123119
$reminders = $this->backend->getRemindersToProcess();
120+
$this->logger->debug('{numReminders} reminders to process', [
121+
'numReminders' => count($reminders),
122+
]);
124123

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

134133
$vcalendar = $this->parseCalendarData($calendarData);
135134
if (!$vcalendar) {
135+
$this->logger->debug('Reminder {id} does not belong to a valid calendar', [
136+
'id' => $reminder['id'],
137+
]);
136138
$this->backend->removeReminder($reminder['id']);
137139
continue;
138140
}
139141

140142
$vevent = $this->getVEventByRecurrenceId($vcalendar, $reminder['recurrence_id'], $reminder['is_recurrence_exception']);
141143
if (!$vevent) {
144+
$this->logger->debug('Reminder {id} does not belong to a valid event', [
145+
'id' => $reminder['id'],
146+
]);
142147
$this->backend->removeReminder($reminder['id']);
143148
continue;
144149
}
145150

146151
if ($this->wasEventCancelled($vevent)) {
152+
$this->logger->debug('Reminder {id} belongs to a cancelled event', [
153+
'id' => $reminder['id'],
154+
]);
147155
$this->deleteOrProcessNext($reminder, $vevent);
148156
continue;
149157
}
150158

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

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

apps/dav/tests/unit/CalDAV/Reminder/ReminderServiceTest.php

Lines changed: 18 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -39,37 +39,39 @@
3939
use OCP\IUser;
4040
use OCP\IUserManager;
4141
use OCP\IUserSession;
42+
use PHPUnit\Framework\MockObject\MockObject;
43+
use Psr\Log\LoggerInterface;
4244
use Test\TestCase;
4345

4446
class ReminderServiceTest extends TestCase {
4547

46-
/** @var Backend|\PHPUnit\Framework\MockObject\MockObject */
48+
/** @var Backend|MockObject */
4749
private $backend;
4850

49-
/** @var NotificationProviderManager|\PHPUnit\Framework\MockObject\MockObject */
51+
/** @var NotificationProviderManager|MockObject */
5052
private $notificationProviderManager;
5153

52-
/** @var IUserManager|\PHPUnit\Framework\MockObject\MockObject */
54+
/** @var IUserManager|MockObject */
5355
private $userManager;
5456

55-
/** @var IGroupManager|\PHPUnit\Framework\MockObject\MockObject*/
57+
/** @var IGroupManager|MockObject*/
5658
private $groupManager;
5759

58-
/** @var IUserSession|\PHPUnit\Framework\MockObject\MockObject */
59-
private $userSession;
60-
61-
/** @var CalDavBackend|\PHPUnit\Framework\MockObject\MockObject */
60+
/** @var CalDavBackend|MockObject */
6261
private $caldavBackend;
6362

64-
/** @var ITimeFactory|\PHPUnit\Framework\MockObject\MockObject */
63+
/** @var ITimeFactory|MockObject */
6564
private $timeFactory;
6665

67-
/** @var IConfig|\PHPUnit\Framework\MockObject\MockObject */
66+
/** @var IConfig|MockObject */
6867
private $config;
6968

7069
/** @var ReminderService */
7170
private $reminderService;
7271

72+
/** @var MockObject|LoggerInterface */
73+
private $logger;
74+
7375
public const CALENDAR_DATA = <<<EOD
7476
BEGIN:VCALENDAR
7577
PRODID:-//Nextcloud calendar v1.6.4
@@ -199,16 +201,20 @@ protected function setUp(): void {
199201
$this->caldavBackend = $this->createMock(CalDavBackend::class);
200202
$this->timeFactory = $this->createMock(ITimeFactory::class);
201203
$this->config = $this->createMock(IConfig::class);
204+
$this->logger = $this->createMock(LoggerInterface::class);
202205

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

205-
$this->reminderService = new ReminderService($this->backend,
208+
$this->reminderService = new ReminderService(
209+
$this->backend,
206210
$this->notificationProviderManager,
207211
$this->userManager,
208212
$this->groupManager,
209213
$this->caldavBackend,
210214
$this->timeFactory,
211-
$this->config);
215+
$this->config,
216+
$this->logger,
217+
);
212218
}
213219

214220
public function testOnCalendarObjectDelete():void {

0 commit comments

Comments
 (0)