Skip to content

Commit

Permalink
Extract some logic out of ProcessesController::getList() into a function
Browse files Browse the repository at this point in the history
Signed-off-by: William Desportes <williamdes@wdes.fr>
  • Loading branch information
williamdes committed Apr 20, 2021
1 parent 187ef65 commit b92476b
Showing 1 changed file with 71 additions and 66 deletions.
137 changes: 71 additions & 66 deletions libraries/classes/Controllers/Server/Status/ProcessesController.php
Expand Up @@ -142,6 +142,75 @@ private function getList(array $params): string
$urlParams['full'] = 1;
}

$sqlQuery = $showFullSql
? 'SHOW FULL PROCESSLIST'
: 'SHOW PROCESSLIST';
if (
(! empty($params['order_by_field'])
&& ! empty($params['sort_order']))
|| ! empty($params['showExecuting'])
) {
$urlParams['order_by_field'] = $params['order_by_field'];
$urlParams['sort_order'] = $params['sort_order'];
$urlParams['showExecuting'] = $params['showExecuting'];
$sqlQuery = 'SELECT * FROM `INFORMATION_SCHEMA`.`PROCESSLIST` ';
}

if (! empty($params['showExecuting'])) {
$sqlQuery .= ' WHERE state != "" ';
}

if (! empty($params['order_by_field']) && ! empty($params['sort_order'])) {
$sqlQuery .= ' ORDER BY '
. Util::backquote($params['order_by_field'])
. ' ' . $params['sort_order'];
}

$result = $this->dbi->query($sqlQuery);
$rows = [];
while ($process = $this->dbi->fetchAssoc($result)) {
// Array keys need to modify due to the way it has used
// to display column values
if (
(! empty($params['order_by_field']) && ! empty($params['sort_order']))
|| ! empty($params['showExecuting'])
) {
foreach (array_keys($process) as $key) {
$newKey = ucfirst(mb_strtolower($key));
if ($newKey === $key) {
continue;
}

$process[$newKey] = $process[$key];
unset($process[$key]);
}
}

$rows[] = [
'id' => $process['Id'],
'user' => $process['User'],
'host' => $process['Host'],
'db' => ! isset($process['db']) || strlen($process['db']) === 0 ? '' : $process['db'],
'command' => $process['Command'],
'time' => $process['Time'],
'state' => ! empty($process['State']) ? $process['State'] : '---',
'progress' => ! empty($process['Progress']) ? $process['Progress'] : '---',
'info' => ! empty($process['Info']) ? Generator::formatSql(
$process['Info'],
! $showFullSql
) : '---',
];
}

return $this->template->render('server/status/processes/list', [
'columns' => $this->getSortableColumnsForProcessList($showFullSql, $params),
'rows' => $rows,
'refresh_params' => $urlParams,
]);
}

private function getSortableColumnsForProcessList(bool $showFullSql, array $params): array
{
// This array contains display name and real column name of each
// sortable column in the table
$sortableColumns = [
Expand Down Expand Up @@ -182,33 +251,8 @@ private function getList(array $params): string
'order_by_field' => 'Info',
],
];
$sortableColCount = count($sortableColumns);

$sqlQuery = $showFullSql
? 'SHOW FULL PROCESSLIST'
: 'SHOW PROCESSLIST';
if (
(! empty($params['order_by_field'])
&& ! empty($params['sort_order']))
|| ! empty($params['showExecuting'])
) {
$urlParams['order_by_field'] = $params['order_by_field'];
$urlParams['sort_order'] = $params['sort_order'];
$urlParams['showExecuting'] = $params['showExecuting'];
$sqlQuery = 'SELECT * FROM `INFORMATION_SCHEMA`.`PROCESSLIST` ';
}

if (! empty($params['showExecuting'])) {
$sqlQuery .= ' WHERE state != "" ';
}

if (! empty($params['order_by_field']) && ! empty($params['sort_order'])) {
$sqlQuery .= ' ORDER BY '
. Util::backquote($params['order_by_field'])
. ' ' . $params['sort_order'];
}

$result = $this->dbi->query($sqlQuery);
$sortableColCount = count($sortableColumns);

$columns = [];
foreach ($sortableColumns as $columnKey => $column) {
Expand Down Expand Up @@ -246,45 +290,6 @@ private function getList(array $params): string
$columns[$columnKey]['is_full'] = true;
}

$rows = [];
while ($process = $this->dbi->fetchAssoc($result)) {
// Array keys need to modify due to the way it has used
// to display column values
if (
(! empty($params['order_by_field']) && ! empty($params['sort_order']))
|| ! empty($params['showExecuting'])
) {
foreach (array_keys($process) as $key) {
$newKey = ucfirst(mb_strtolower($key));
if ($newKey === $key) {
continue;
}

$process[$newKey] = $process[$key];
unset($process[$key]);
}
}

$rows[] = [
'id' => $process['Id'],
'user' => $process['User'],
'host' => $process['Host'],
'db' => ! isset($process['db']) || strlen($process['db']) === 0 ? '' : $process['db'],
'command' => $process['Command'],
'time' => $process['Time'],
'state' => ! empty($process['State']) ? $process['State'] : '---',
'progress' => ! empty($process['Progress']) ? $process['Progress'] : '---',
'info' => ! empty($process['Info']) ? Generator::formatSql(
$process['Info'],
! $showFullSql
) : '---',
];
}

return $this->template->render('server/status/processes/list', [
'columns' => $columns,
'rows' => $rows,
'refresh_params' => $urlParams,
]);
return $columns;
}
}

0 comments on commit b92476b

Please sign in to comment.