'ObjectCount'
];
+ /**
+ * Object result modes.
+ * Modes:
+ * - normal - record list without any additional data
+ * - overview - record list with some summary count (files, vSphere, MySQL, PostgreSQL...)
+ */
+ const OBJECT_RESULT_MODE_NORMAL = 'normal';
+ const OBJECT_RESULT_MODE_OVERVIEW = 'overview';
+
/**
* Object result record view.
* Views:
* @param string $view job records view (basic, full)
* @return array object list
*/
- public function getObjects($criteria = array(), $limit_val = null, $offset_val = 0, $sort_col = 'ObjectId', $sort_order = 'DESC', $group_by = null, $group_limit = 0, $view = self::OBJ_RESULT_VIEW_FULL) {
+ public function getObjects($criteria = array(), $limit_val = null, $offset_val = 0, $sort_col = 'ObjectId', $sort_order = 'DESC', $group_by = null, $group_limit = 0, $view = self::OBJ_RESULT_VIEW_FULL, $mode = self::OBJECT_RESULT_MODE_NORMAL) {
$db_params = $this->getModule('api_config')->getConfig('db');
if ($db_params['type'] === Database::PGSQL_TYPE) {
$sort_col = strtolower($sort_col);
$statement = Database::runQuery($sql, $where['params']);
$result = $statement->fetchAll(\PDO::FETCH_OBJ);
Database::groupBy($group_by, $result, $group_limit);
+ if ($mode == self::OBJECT_RESULT_MODE_OVERVIEW) {
+ // Overview mode.
+ $result = [
+ 'objects' => $result,
+ 'overview' => $this->getObjectCountByObjectType($criteria)
+ ];
+ }
return $result;
}
$sth->execute($where['params']);
return $sth->fetchAll(\PDO::FETCH_ASSOC);
}
+
+ /**
+ * Get object count by object type.
+ * NOTE: It accepts the same criteria as ObjectManager::getObjects().
+ *
+ * @param array $criteria SQL criteria
+ * @return array object type counts
+ */
+ public function getObjectCountByObjectType($criteria) {
+ $where = Database::getWhere($criteria);
+ $sql = 'SELECT DISTINCT ObjectType as objecttype,
+ COUNT(1) AS count
+ FROM Object
+ JOIN Job USING (JobId)
+ ' . $where['where'] . '
+ GROUP BY objecttype';
+ $statement = Database::runQuery($sql, $where['params']);
+ return $statement->fetchAll(\PDO::FETCH_ASSOC);
+ }
}
use Baculum\Common\Modules\Errors\ObjectError;
use Baculum\API\Modules\ObjectRecord;
+use Baculum\API\Modules\ObjectManager;
/**
* Objects endpoint.
$age = $this->Request->contains('age') && $misc->isValidInteger($this->Request['age']) ? (int)$this->Request['age'] : null;
$order_by = $this->Request->contains('order_by') && $misc->isValidColumn($this->Request['order_by']) ? $this->Request['order_by']: 'ObjectId';
$order_direction = $this->Request->contains('order_direction') && $misc->isValidOrderDirection($this->Request['order_direction']) ? $this->Request['order_direction']: 'DESC';
+ $mode = ($this->Request->contains('overview') && $misc->isValidBooleanTrue($this->Request['overview'])) ? ObjectManager::OBJECT_RESULT_MODE_OVERVIEW : ObjectManager::OBJECT_RESULT_MODE_NORMAL;
$or = new \ReflectionClass('Baculum\API\Modules\ObjectRecord');
$prop_cols = $or->getProperties();
$order_by_lc,
$order_direction,
$group_by,
- $group_limit
+ $group_limit,
+ ObjectManager::OBJ_RESULT_VIEW_FULL,
+ $mode
);
$this->output = $objects;
$this->error = ObjectError::ERROR_NO_ERRORS;