removes retry after 60 secs in findCurrentUserPrincipalForUsers
authorPhilipp Schüle <p.schuele@metaways.de>
Fri, 8 Aug 2014 13:49:58 +0000 (15:49 +0200)
committerPhilipp Schüle <p.schuele@metaways.de>
Thu, 4 Sep 2014 09:26:40 +0000 (11:26 +0200)
* allows to skip users that could not be processed
* improves logging and coding styles

Change-Id: I7b5d90590a99a6ee86ad98619a785cb0d620aa30
Reviewed-on: http://gerrit.tine20.com/customers/953
Tested-by: Jenkins CI (http://ci.tine20.com/)
Reviewed-by: Philipp Schüle <p.schuele@metaways.de>
tine20/Calendar/Import/CalDav/Client.php
tine20/Tinebase/Import/CalDav/Client.php

index 79ecd31..ac5ff0b 100644 (file)
@@ -174,8 +174,12 @@ class Calendar_Import_CalDav_Client extends Tinebase_Import_CalDav_Client
     
     public function importAllCalendars()
     {
-        if (count($this->calendars) < 1 && ! $this->findAllCalendars())
+        if (count($this->calendars) < 1 && ! $this->findAllCalendars()) {
             return false;
+        }
+        
+        if (Tinebase_Core::isLogLevel(Zend_Log::INFO)) Tinebase_Core::getLogger()->info(__METHOD__ . ' ' . __LINE__ 
+            . ' Importing all calendars for user ' . $this->userName);
         
         Calendar_Controller_Event::getInstance()->sendNotifications(false);
         Sabre\VObject\Component\VCalendar::$propertyMap['ATTACH'] = '\\Calendar_Import_CalDav_SabreAttachProperty';
@@ -211,8 +215,12 @@ class Calendar_Import_CalDav_Client extends Tinebase_Import_CalDav_Client
     
     public function importAllCalendarData($onlyCurrentUserOrganizer = false)
     {
-        if (count($this->calendarICSs) < 1 && ! $this->findAllCalendarICSs())
+        if (count($this->calendarICSs) < 1 && ! $this->findAllCalendarICSs()) {
             return false;
+        }
+        
+        if (Tinebase_Core::isLogLevel(Zend_Log::INFO)) Tinebase_Core::getLogger()->info(__METHOD__ . ' ' . __LINE__
+            . ' Importing all calendar data for user ' . $this->userName);
         
         Calendar_Controller_Event::getInstance()->sendNotifications(false);
         Sabre\VObject\Component\VCalendar::$propertyMap['ATTACH'] = '\\Calendar_Import_CalDav_SabreAttachProperty';
@@ -369,8 +377,9 @@ class Calendar_Import_CalDav_Client extends Tinebase_Import_CalDav_Client
     
     public function importAllCalendarDataForUsers(array $users)
     {
-        if (!$this->findCurrentUserPrincipalForUsers($users))
+        if (!$this->findCurrentUserPrincipalForUsers($users)) {
             return false;
+        }
         
         $result = true;
         // first only import events where the current user is also the organizer
@@ -396,8 +405,9 @@ class Calendar_Import_CalDav_Client extends Tinebase_Import_CalDav_Client
     
     public function importAllCalendarsForUsers(array $users)
     {
-        if (!$this->findCurrentUserPrincipalForUsers($users))
+        if (!$this->findCurrentUserPrincipalForUsers($users)) {
             return false;
+        }
         
         $result = true;
         foreach ($users as $username => $pwd) {
@@ -417,4 +427,4 @@ class Calendar_Import_CalDav_Client extends Tinebase_Import_CalDav_Client
         $this->calendars = array();
         $this->calendarICSs = array();
     }
-}
\ No newline at end of file
+}
index 194e642..737bd42 100644 (file)
@@ -66,7 +66,7 @@ class Tinebase_Import_CalDav_Client extends \Sabre\DAV\Client
     
     public function findCurrentUserPrincipal()
     {
-        $result = $this->calDavRequest('PROPFIND', '/principals/', self::findCurrentUserPrincipalRequest);
+        $result = $this->calDavRequest('PROPFIND', '/principals/', self::findCurrentUserPrincipalRequest, 0, /* tries = */ 1);
         if (isset($result['{DAV:}current-user-principal']))
         {
             try {
@@ -87,17 +87,28 @@ class Tinebase_Import_CalDav_Client extends \Sabre\DAV\Client
         return false;
     }
     
-    public function findCurrentUserPrincipalForUsers(array $users)
+    public function findCurrentUserPrincipalForUsers(array &$users)
     {
-        $result = true;
         foreach ($users as $username => $pwd) {
             $this->userName = $username;
             $this->password = $pwd;
-            if (!$this->findCurrentUserPrincipal()) {
-                $result = false;
+            
+            if (Tinebase_Core::isLogLevel(Zend_Log::INFO)) Tinebase_Core::getLogger()->info(__METHOD__ . ' ' . __LINE__
+                . ' Find principal for user ' . $this->userName);
+            try {
+                if (! $this->findCurrentUserPrincipal()) {
+                    if (Tinebase_Core::isLogLevel(Zend_Log::NOTICE)) Tinebase_Core::getLogger()->notice(__METHOD__ . ' ' . __LINE__
+                        . ' Skipping ' . $username);
+                    unset($users[$username]);
+                }
+            } catch (Tinebase_Exception $te) {
+                // TODO should use better exception (Not_Authenticatied, ...)
+                if (Tinebase_Core::isLogLevel(Zend_Log::NOTICE)) Tinebase_Core::getLogger()->notice(__METHOD__ . ' ' . __LINE__
+                        . ' Skipping ' . $username);
+                unset($users[$username]);
             }
         }
-        return $result;
+        return count($users) > 0;
     }
     
     public function findCalendarHomeSet()
@@ -135,29 +146,36 @@ class Tinebase_Import_CalDav_Client extends \Sabre\DAV\Client
         $this->calendarHomeSet = '';
     }
     
-    public function calDavRequest($method, $uri, $body, $depth = 0)
+    public function calDavRequest($method, $uri, $body, $depth = 0, $tries = 10)
     {
-        $redo = 0;
         $response = null;
-        while (++$redo < 10)
+        while ($tries > 0)
         {
             try {
+                if (Tinebase_Core::isLogLevel(Zend_Log::INFO)) Tinebase_Core::getLogger()->info(__METHOD__ . '::' . __LINE__
+                        . ' Sending ' . $method . ' request ...');
                 $response = $this->request($method, $uri, $body, array(
                     'Depth' => $depth,
                     'Content-Type' => 'text/xml',
                 ));
             } catch (Exception $e) {
                 if (Tinebase_Core::isLogLevel(Zend_Log::WARN))
-                    Tinebase_Core::getLogger()->warn(__METHOD__ . '::' . __LINE__ . ' caldav request failed, sleeping 60 seconds and retrying: '
-                            . $method . ' ' . $uri . "\n" . $body . "\n" . $e->getMessage());
-                sleep(60);
+                    Tinebase_Core::getLogger()->warn(__METHOD__ . '::' . __LINE__
+                            . ' Caldav request failed: '
+                            . '(' . $this->userName . ')' . $method . ' ' . $uri . "\n" . $body
+                            . "\n" . $e->getMessage());
+                if (--$tries > 0) {
+                    if (Tinebase_Core::isLogLevel(Zend_Log::INFO)) Tinebase_Core::getLogger()->info(__METHOD__ . '::' . __LINE__
+                            . ' Sleeping 60 seconds and retrying ... ');
+                    sleep(60);
+                }
                 continue;
             }
             break;
         }
         
         if (! $response) {
-            throw new Tinebase_Exception("no response after several retries");
+            throw new Tinebase_Exception("no response");
         }
         
         $result = $this->parseMultiStatus($response['body']);