From: Michael M Slusarz Date: Fri, 29 Jan 2010 19:40:13 +0000 (-0700) Subject: Added more features to IMAP cache query script X-Git-Url: https://git.internetallee.de/?a=commitdiff_plain;h=bc16483dfb00d205e9f8fea6c673993b4c857a7b;p=horde.git Added more features to IMAP cache query script Allow expiring mailboxes/UIDs Add detailed statistics for individual mailboxes. --- diff --git a/imp/scripts/query-imap-cache.php b/imp/scripts/query-imap-cache.php index 9302ad17c..20f5d8a4a 100755 --- a/imp/scripts/query-imap-cache.php +++ b/imp/scripts/query-imap-cache.php @@ -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; } }