Added more features to IMAP cache query script
authorMichael M Slusarz <slusarz@curecanti.org>
Fri, 29 Jan 2010 19:40:13 +0000 (12:40 -0700)
committerMichael M Slusarz <slusarz@curecanti.org>
Fri, 29 Jan 2010 19:40:13 +0000 (12:40 -0700)
Allow expiring mailboxes/UIDs
Add detailed statistics for individual mailboxes.

imp/scripts/query-imap-cache.php

index 9302ad1..20f5d8a 100755 (executable)
@@ -91,7 +91,11 @@ try {
 $opts = array(
     1 => 'Full Statistics',
     2 => 'Summary',
-    3 => 'Exit'
+    3 => 'Detailed Statistics (Single Mailbox)',
+    4 => 'Expire Mailbox',
+    5 => 'Expire All Mailboxes',
+    6 => 'Expire specific UIDs',
+    7 => 'Exit'
 );
 
 while (true) {
@@ -126,12 +130,76 @@ while (true) {
         if ($action == 1) {
             $cli->writeln();
             foreach ($mbox_list as $key => $val) {
-                $cli->writeln($cli->indent(sprintf("%s (%d msgs, %d searches)", $key, $val['msgs'], $val['search'])));
+                $cli->writeln($cli->indent($cli->green($key) . sprintf(" (%d msgs, %d searches)", $val['msgs'], $val['search'])));
             }
         }
         break;
 
     case 3:
+        $mbox_prompt = $cli->prompt('Mailbox:');
+        if (strlen($mbox_prompt) &&
+            ($res = $ob->cache->get($mbox_prompt))) {
+            $cli->message('Cached messages: ' . count($res) . ' [' . $ob->utils->toSequenceString($res) . ']');
+            if ($res = $ob->cache->getMetaData($mbox_prompt)) {
+                $status = $ob->status($mbox_prompt, Horde_Imap_Client::STATUS_UIDVALIDITY | Horde_Imap_Client::STATUS_HIGHESTMODSEQ);
+                $cli->message('UIDVALIDITY: ' . $res['uidvalid'] . ' [Server value: ' . (($status['uidvalidity'] != $res['uidvalid']) ? $cli->red($status['uidvalidity']) : $status['uidvalidity']) . ']');
+                if (isset($res['HICmodseq'])) {
+                    $cli->message('Highest MODSEQ seen: ' . $res['HICmodseq'] . ' [Server value: ' . (($status['highestmodseq'] != $res['HICmodseq']) ? $cli->red($status['highestmodseq']) : $status['highestmodseq']) . ']');
+                }
+                if (isset($res['HICsearch'])) {
+                    $cli->message('Cached searches: ' . (count($res['HICsearch']) - 1));
+                }
+            }
+        }
+        break;
+
+    case 4:
+    case 5:
+        if ($action == 4) {
+            $prompt = $cli->prompt('Mailbox:');
+            if (!strlen($prompt)) {
+                break;
+            }
+            $mbox_list = array($prompt);
+        } else {
+            $mbox_list = array($mboxes);
+        }
+
+        if ($cli->prompt('Delete mailbox cache(s)?', array('1' => 'No', '2' => 'Yes'), 1) == 2) {
+            $cli->writeln();
+            foreach ($mbox_list as $val) {
+                $ob->cache->deleteMailbox($val);
+                $cli->message(sprintf('Deleted cache for "%s".', $val), 'cli.success');
+            }
+        }
+        break;
+
+    case 6:
+        $mbox = $cli->prompt('Mailbox:');
+        if (!strlen($mbox)) {
+            break;
+        }
+        $uids = $cli->prompt('UIDs (IMAP sequence string format):');
+        if (!strlen($uids)) {
+            break;
+        }
+        $uids = $ob->utils->fromSequenceString($uids);
+        if (empty($uids)) {
+            $cli->message('No UIDs found', 'cli.error');
+            break;
+        }
+
+        $cli->writeln();
+
+        try {
+            $ob->cache->deleteMsgs($mbox, $uids);
+            $cli->message(sprintf('Deleted %d UIDs from cache.', count($uids)), 'cli.success');
+        } catch (Horde_Imap_Client_Exception $e) {
+            $cli->message('Failed deleting UIDS. Error: ' . $e->getMessage(), 'cli.error');
+        }
+        break;
+
+    case 7:
         exit;
     }
 }