Добалвен параметр dry-run для не внесения изменений в БД ИИ based
parent
1ded77c5dc
commit
de65a2b60c
|
|
@ -5,7 +5,7 @@ use Nechaev\Reports\Core\App;
|
|||
require_once __DIR__ . '/../functions.php';
|
||||
require_once __DIR__ . '/../../init.php';
|
||||
|
||||
$options = getopt('h::', ['non-interactive::', 'help::', 'sprint-id::', 'team::', 'log::']);
|
||||
$options = getopt('h::', ['non-interactive::', 'help::', 'sprint-id::', 'team::', 'log::', 'dry-run::']);
|
||||
|
||||
if (isset($options['h']) || isset($options['help'])) {
|
||||
$helpText = "Использование: php " . basename($argv[0]) . " [ОПЦИИ]\n" .
|
||||
|
|
@ -25,6 +25,7 @@ if (isset($options['h']) || isset($options['help'])) {
|
|||
" (пересчитывается даже если процент уже посчитан)\n" .
|
||||
" --log[=ПУТЬ] Писать процесс выполнения (ключ задачи и решение по ней) в файл.\n" .
|
||||
" Если путь не указан, используется sprint_completion_<дата>.log\n" .
|
||||
" --dry-run Только посчитать и показать результат, без изменений в базе данных\n" .
|
||||
" --non-interactive Не задавать вопросы в процессе работы\n";
|
||||
|
||||
fwrite(STDOUT, $helpText);
|
||||
|
|
@ -32,6 +33,7 @@ if (isset($options['h']) || isset($options['help'])) {
|
|||
}
|
||||
|
||||
$interactiveMode = !isset($options['non-interactive']);
|
||||
$dryRun = isset($options['dry-run']);
|
||||
|
||||
$sprintIdFilter = null;
|
||||
if (isset($options['sprint-id']) && $options['sprint-id'] !== false && $options['sprint-id'] !== '') {
|
||||
|
|
@ -139,6 +141,11 @@ foreach ($membershipRows as $row) {
|
|||
|
||||
echo "Найдено спринтов без посчитанного процента закрытия: " . count($sprints) . "\n";
|
||||
|
||||
if ($dryRun) {
|
||||
echo "Режим dry-run: изменения в базу данных вноситься не будут.\n";
|
||||
$writeLog("Режим dry-run: изменения в базу данных не вносятся.");
|
||||
}
|
||||
|
||||
if ($interactiveMode) {
|
||||
$answer = readline("Рассчитать процент закрытия для этих спринтов? (Y/n): ");
|
||||
if (strtolower(trim($answer)) === 'n') {
|
||||
|
|
@ -432,27 +439,31 @@ foreach ($sprintsByJiraId as $jiraSprintId => $sprintRows) {
|
|||
|
||||
$percentage = round($stats['done'] / $stats['total'] * 100, 2);
|
||||
|
||||
try {
|
||||
App::getDb()->execute(
|
||||
"UPDATE sprints SET sprint_completion_percentage = :percentage WHERE id = :id",
|
||||
[
|
||||
'percentage' => $percentage,
|
||||
'id' => $sprintRowId,
|
||||
]
|
||||
);
|
||||
} catch (PDOException $e) {
|
||||
echo "⚠️ Не удалось сохранить процент для спринта '{$sprintName}' (команда {$teamId}): "
|
||||
. $e->getMessage() . "\n";
|
||||
$writeLog("Спринт '{$sprintName}' (команда {$teamId}): ошибка сохранения — " . $e->getMessage());
|
||||
continue;
|
||||
if (!$dryRun) {
|
||||
try {
|
||||
App::getDb()->execute(
|
||||
"UPDATE sprints SET sprint_completion_percentage = :percentage WHERE id = :id",
|
||||
[
|
||||
'percentage' => $percentage,
|
||||
'id' => $sprintRowId,
|
||||
]
|
||||
);
|
||||
} catch (PDOException $e) {
|
||||
echo "⚠️ Не удалось сохранить процент для спринта '{$sprintName}' (команда {$teamId}): "
|
||||
. $e->getMessage() . "\n";
|
||||
$writeLog("Спринт '{$sprintName}' (команда {$teamId}): ошибка сохранения — " . $e->getMessage());
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
echo "Спринт '{$sprintName}' (команда {$teamId}): "
|
||||
. "{$stats['done']} из {$stats['total']} задач завершено — {$percentage}%"
|
||||
. ($notInSprintAtStartCount > 0 ? " (по спринту исключено отсутствовавших в спринте на старте: {$notInSprintAtStartCount})" : "")
|
||||
. ($dryRun ? " [dry-run: не сохранено]" : "")
|
||||
. "\n";
|
||||
$writeLog("ИТОГ спринт '{$sprintName}' (команда {$teamId}): "
|
||||
. "{$stats['done']}/{$stats['total']} закрыто — {$percentage}%");
|
||||
. "{$stats['done']}/{$stats['total']} закрыто — {$percentage}%"
|
||||
. ($dryRun ? " [dry-run: не сохранено]" : ""));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue