protected function getDatabseMetaData($tableName)
 {
     $table = new Table($tableName);
     $table->addColumn('tag_id', 'integer', array("unsigned" => true, 'autoincrement' => true));
     $table->addColumn('tag_user_context', 'integer', array("unsigned" => true, 'notnull' => false));
     $table->addColumn('tag_date_created', 'datetime', array('notnull' => true));
     $table->addColumn('tag_weight', 'float', array("unsigned" => true, 'notnull' => false));
     $table->addColumn('tag_title', 'string', array('length' => 45, 'notnull' => true));
     $table->setPrimaryKey(array("tag_id"));
     $table->addIndex(array('tag_user_context'));
     # vcolumn for counts
     $table->addVirtualColumn('tag_count', 'integer', array('unsigned' => true));
     return $table;
 }
 /**
  *  Register the setup code with the DI Container
  *
  * @access public
  * @param Application $app
  */
 public function register(Application $app)
 {
     $app[$this->index . '.options'] = array();
     $index = $this->index;
     #------------------------------------------------------------------
     # Table Meta Data
     #
     #------------------------------------------------------------------
     $app[$this->index . '.meta'] = $app->share(function () use($app, $index) {
         $table = new Table($app[$index . '.options']['tableName']);
         $table->addColumn('tag_id', 'integer', array("unsigned" => true, 'autoincrement' => true));
         $table->addColumn('tag_user_context', 'integer', array("unsigned" => true, 'notnull' => false));
         $table->addColumn('tag_date_created', 'datetime', array('notnull' => true));
         $table->addColumn('tag_weight', 'float', array("unsigned" => true, 'notnull' => false));
         $table->addColumn('tag_title', 'string', array('length' => 45, 'notnull' => true));
         $table->setPrimaryKey(array("tag_id"));
         $table->addIndex(array('tag_user_context'));
         # vcolumn for counts
         $table->addVirtualColumn('tag_count', 'integer', array('unsigned' => true));
         return $table;
     });
     #------------------------------------------------------------------
     # Load the Tag Library API
     #
     #------------------------------------------------------------------
     $app[$this->index] = $app->share(function () use($app, $index) {
         # merge options with default struct
         $app[$index . '.options'] = array_replace(array('tableName' => 'quicktag_tags'), $app[$index . '.options']);
         $event = $app['dispatcher'];
         $monolog = $app['monolog'];
         $db = $app['db'];
         $meta = $app[$index . '.meta'];
         $tableName = $app[$index . '.options']['tableName'];
         $logBridge = new \QuickTag\Log\MonologBridge($monolog);
         $logSubscriber = new \QuickTag\Log\LogSubscriber($logBridge);
         $tagBuilder = new \QuickTag\Model\TagBuilder();
         # bind events to logbridge
         $event->addSubscriber($logSubscriber);
         $tagGateway = new \QuickTag\Model\TagGateway($tableName, $db, $event, $meta, null, $tagBuilder);
         $tagMapper = new \QuickTag\Model\TagMapper($event, $tagGateway);
         return new \QuickTag\Tag($event, $tagMapper);
     });
     #------------------------------------------------------------------
     # Load the Entity Formatters
     #
     #------------------------------------------------------------------
     $app[$this->index . '.tagFormatter'] = $app->share(function () {
         return new \QuickTag\Silex\Formatter\TagFormatter();
     });
 }
 public function getMonitorTable()
 {
     $table = new Table($this->monitor_table);
     # setup pk
     $table->addColumn('monitor_id', 'integer', array("unsigned" => true, 'autoincrement' => true));
     $table->setPrimaryKey(array("monitor_id"));
     # date and hour
     $table->addColumn('monitor_dte', 'datetime', array());
     # add index
     $table->addUniqueIndex(array('monitor_dte'));
     # worker stats
     $table->addColumn('worker_max_time', 'integer', array("unsigned" => true, 'notnull' => false));
     $table->addColumn('worker_min_time', 'integer', array("unsigned" => true, 'notnull' => false));
     $table->addColumn('worker_mean_time', 'integer', array("unsigned" => true, 'notnull' => false));
     $table->addColumn('worker_mean_throughput', 'integer', array("unsigned" => true, 'notnull' => false));
     $table->addColumn('worker_max_throughput', 'integer', array("unsigned" => true, 'notnull' => false));
     $table->addColumn('worker_mean_utilization', 'float', array("unsigned" => true, 'notnull' => false));
     # queue stats
     $table->addColumn('queue_no_waiting_jobs', 'integer', array("unsigned" => true, 'notnull' => false));
     $table->addColumn('queue_no_failed_jobs', 'integer', array("unsigned" => true, 'notnull' => false));
     $table->addColumn('queue_no_error_jobs', 'integer', array("unsigned" => true, 'notnull' => false));
     $table->addColumn('queue_no_completed_jobs', 'integer', array("unsigned" => true, 'notnull' => false));
     $table->addColumn('queue_no_processing_jobs', 'integer', array("unsigned" => true, 'notnull' => false));
     $table->addColumn('queue_mean_service_time', 'integer', array("unsigned" => true, 'notnull' => false));
     $table->addColumn('queue_min_service_time', 'integer', array("unsigned" => true, 'notnull' => false));
     $table->addColumn('queue_max_service_time', 'integer', array("unsigned" => true, 'notnull' => false));
     $table->addColumn('monitor_complete', 'boolean', array('default' => false));
     return $table;
 }