Re: [fw-general] Zend_ProgressBar (Ideas?)

2009-03-06 Thread Ben Scholzen 'DASPRiD'
-BEGIN PGP SIGNED MESSAGE-
Hash: SHA1

A bit late, but, you should just use jsPull with the persistentNamespace.
...
:  ___   _   ___ ___ ___ _ ___:
: |   \ /_\ / __| _ \ _ (_)   \   :
: | |) / _ \\__ \  _/   / | |) |  :
: |___/_/:\_\___/_| |_|_\_|___/   :
:::
: Web: http://www.dasprids.de :
: E-mail : m...@dasprids.de   :
: Jabber : jab...@dasprids.de :
: ICQ: 105677955  :
:::


Ryan Brooks schrieb:
 Howdy folks, 
 
 I have to confess that I am truly pleased with Zend_ProgressBar. However, I
 had a couple thoughts once I actually started using it. I am sending this
 message to the mailing list because I'm not entirely sure it is within the
 scope/context of Zend_ProgressBar.
 
 I wonder if it's not a good idea to allow single instances of ZPB
 (namespaces). For instance, in my case I'm doing a search index rebuild of
 a large resultset. In particular I flush my index tables, fetch all my
 records and insert the index values into one table and the relations to
 another.
 
 However, I'd like this process to be running a single instance at a time.
 For example, if I request /resource/intense/rebuild-search-index/, the
 process will start. However, if I request it again, I'd like the process to
 not start again, but update with the current progress. I had already
 considered adjusting Zend_ProgressBar::$_min to use
 Zend_ProgressBar::$_current as an offset, but in this particular case I
 don't think it applies. I'm including some code as an example.
 
 One caveat I can think of is sharing process information across
 sessions/users, so it may be a good idea to pass in a cache object, or
 explicitly define a cache prefix? I also don't think this would be
 considered adapter functionality, as it seems fairly global to
 Zend_ProgressBar.
 
 Other potential usage scenarios would be converting a video from one type
 to another, or converting a CMYK image to RGB (using a filename as a
 prefix), etc. 
 
 The methods I propose (though their functionality, names and usage aren't
 in stone, I leave that to the devs) include:
 
 setSingleInstance() // sets ZPB to allow a single instance of a progress
 bar, cross user
 setCacheInstance() // Either setting a Zend_Cache instance, or just a
 namespace
 setIgnoreUserAbort() // sets ignore_user_abort() - just a thought, not sure
 if it is needed
 isIdle() // Returns (bool) where singleInstance is registered (but not
 running?)
 isRunning() // returns (bool) if running
 getCurrent() // Current record convenience method
 removeCache() // flushes the cache object
 rewind() // Potentially not the best method name, but it would flush the
 cache, reset user abort, etc.
 
 Just let me know if I'm out of my mind!
 
 Thanks folks,
 
 -Ryan
 
 ?php
 require_once 'Zend/ProgressBar.php'; 
 require_once 'Zend/ProgressBar/Adapter/JsPush.php';
 class Resource_IntenseController extends My_Controller
 {
   private $_cacheObj = NULL;
   public function init()
   {
   $frontendOptions = array('automatic_serialization' = true);
   $backendOptions  = array(
   'cache_dir' = 'cache/progressbar',
   'file_name_prefix' = 'myNamespace'
   );
   $this-_cacheObj = Zend_Cache::factory('Core', 'File', 
 $frontendOptions,
 $backendOptions);
   }
   private function _exampleRecordList()
   {
   if(!$records = $this-_cacheObj-load('index_process'))
   {
   $records =
 IndexFactory::getInstance()-fetchLargeResultsetForReindexing('*');
   $this-_cacheObj-save($records, 'index_process');
   }
   return $records;
   }
   public function indexAction()
   {
   // ...
   }
   public function rebuildSearchIndexAction()
   {
   $this-noRender();
   if (isset($_GET['progress']))
   {
   $rows = $this-_exampleRecordList();
   $cnt = count($rows);
   $adapter = new
 Zend_ProgressBar_Adapter_JsPush(array('updateMethodName' =
 'Zend_ProgressBar_Update', 'finishMethodName' =
 'Zend_ProgressBar_Finish')); 
   $progressBar = new Zend_ProgressBar($adapter, 0, $cnt, 
 'index_Process');
 
   $progressBar-setSingleInstance('my_namespace') // Or 
 true, and use
 _persistenceNamespace as a namespace adapter. It would allow single
 instances of multiple namespaces
   -setCacheInstance($this-_cache)
   -setIgnoreUserAbort();
   try
   {
   if($progressBar-isIdle() === (bool) TRUE)
   {
   do {
   

[fw-general] Zend_ProgressBar (Ideas?)

2008-12-10 Thread Ryan Brooks
Howdy folks, 

I have to confess that I am truly pleased with Zend_ProgressBar. However, I
had a couple thoughts once I actually started using it. I am sending this
message to the mailing list because I'm not entirely sure it is within the
scope/context of Zend_ProgressBar.

I wonder if it's not a good idea to allow single instances of ZPB
(namespaces). For instance, in my case I'm doing a search index rebuild of
a large resultset. In particular I flush my index tables, fetch all my
records and insert the index values into one table and the relations to
another.

However, I'd like this process to be running a single instance at a time.
For example, if I request /resource/intense/rebuild-search-index/, the
process will start. However, if I request it again, I'd like the process to
not start again, but update with the current progress. I had already
considered adjusting Zend_ProgressBar::$_min to use
Zend_ProgressBar::$_current as an offset, but in this particular case I
don't think it applies. I'm including some code as an example.

One caveat I can think of is sharing process information across
sessions/users, so it may be a good idea to pass in a cache object, or
explicitly define a cache prefix? I also don't think this would be
considered adapter functionality, as it seems fairly global to
Zend_ProgressBar.

Other potential usage scenarios would be converting a video from one type
to another, or converting a CMYK image to RGB (using a filename as a
prefix), etc. 

The methods I propose (though their functionality, names and usage aren't
in stone, I leave that to the devs) include:

setSingleInstance() // sets ZPB to allow a single instance of a progress
bar, cross user
setCacheInstance() // Either setting a Zend_Cache instance, or just a
namespace
setIgnoreUserAbort() // sets ignore_user_abort() - just a thought, not sure
if it is needed
isIdle() // Returns (bool) where singleInstance is registered (but not
running?)
isRunning() // returns (bool) if running
getCurrent() // Current record convenience method
removeCache() // flushes the cache object
rewind() // Potentially not the best method name, but it would flush the
cache, reset user abort, etc.

Just let me know if I'm out of my mind!

Thanks folks,

-Ryan

?php
require_once 'Zend/ProgressBar.php'; 
require_once 'Zend/ProgressBar/Adapter/JsPush.php';
class Resource_IntenseController extends My_Controller
{
private $_cacheObj = NULL;
public function init()
{
$frontendOptions = array('automatic_serialization' = true);
$backendOptions  = array(
'cache_dir' = 'cache/progressbar',
'file_name_prefix' = 'myNamespace'
);
$this-_cacheObj = Zend_Cache::factory('Core', 'File', 
$frontendOptions,
$backendOptions);
}
private function _exampleRecordList()
{
if(!$records = $this-_cacheObj-load('index_process'))
{
$records =
IndexFactory::getInstance()-fetchLargeResultsetForReindexing('*');
$this-_cacheObj-save($records, 'index_process');
}
return $records;
}
public function indexAction()
{
// ...
}
public function rebuildSearchIndexAction()
{
$this-noRender();
if (isset($_GET['progress']))
{
$rows = $this-_exampleRecordList();
$cnt = count($rows);
$adapter = new
Zend_ProgressBar_Adapter_JsPush(array('updateMethodName' =
'Zend_ProgressBar_Update', 'finishMethodName' =
'Zend_ProgressBar_Finish')); 
$progressBar = new Zend_ProgressBar($adapter, 0, $cnt, 
'index_Process');

$progressBar-setSingleInstance('my_namespace') // Or 
true, and use
_persistenceNamespace as a namespace adapter. It would allow single
instances of multiple namespaces
-setCacheInstance($this-_cache)
-setIgnoreUserAbort();
try
{
if($progressBar-isIdle() === (bool) TRUE)
{
do {
$runningStatus = 
$progressBar-isRunning();
$currentRecord = 
$rows[$progressBar-getCurrent()];

Records_IndexFactory::getInstance()-insertSearchIndex($currentRecord,
'my_large_search_index');
$text = Starting record 
$currentRecord of $cnt;

$progressBar-update($currentRecord, $text); 
usleep(10);