harden reset system

This commit is contained in:
team 1
2026-02-15 17:14:00 +01:00
parent 402838adfa
commit bf71ca07fa
4 changed files with 55 additions and 24 deletions

View File

@@ -15,6 +15,11 @@ parameters:
mto.vector.ingest_script: '/src/Vector/vector_ingest.py'
mto.vector.data.path: '%kernel.project_dir%/var/knowledge'
mto.vector.data.upload.path: '%mto.vector.data.path%/uploads'
mto.vector.data.ndjson.path: '%mto.vector.data.path%/index.ndjson'
mto.vector.data.vector_index.path: '%mto.vector.data.path%/vector.index'
mto.vector.data.vector_index_meta_json.path: '%mto.vector.data.path%/vector.index.meta.json'
mto.vector.timeout: 600
# ------------------------------------------------------------

View File

@@ -19,6 +19,7 @@ use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
use Symfony\Component\Routing\Attribute\Route;
use Symfony\Component\Uid\Uuid;
use function function_exists;
#[Route('/admin/documents')]
class DocumentController extends AbstractController
@@ -60,7 +61,12 @@ class DocumentController extends AbstractController
}
#[Route('/new', name: 'admin_document_new')]
public function new(Request $request, DocumentService $documentService, FormatText $formatText): Response
public function new(
Request $request,
DocumentService $documentService,
FormatText $formatText,
ParameterBagInterface $params
): Response
{
if ($request->isMethod('POST')) {
@@ -74,7 +80,7 @@ class DocumentController extends AbstractController
return $this->redirectToRoute('admin_document_new');
}
$uploadDir = $this->getParameter('kernel.project_dir') . '/var/knowledge/uploads';
$uploadDir = $params->get('mto.vector.data.upload.path');
if (!is_dir($uploadDir)) {
mkdir($uploadDir, 0777, true);
@@ -107,7 +113,8 @@ class DocumentController extends AbstractController
string $id,
Request $request,
EntityManagerInterface $em,
DocumentService $documentService
DocumentService $documentService,
ParameterBagInterface $params
): Response
{
@@ -126,7 +133,7 @@ class DocumentController extends AbstractController
return $this->redirectToRoute('admin_document_version_new', ['id' => $id]);
}
$uploadDir = $this->getParameter('kernel.project_dir') . '/var/knowledge/uploads';
$uploadDir = $params->get('mto.vector.data.upload.path');
if (!is_dir($uploadDir)) {
mkdir($uploadDir, 0777, true);
@@ -250,7 +257,7 @@ class DocumentController extends AbstractController
);
// Best effort: wenn exec deaktiviert ist, sauber abbrechen.
if (!\function_exists('exec')) {
if (!function_exists('exec')) {
$jobService->markFailed($job, 'Server configuration does not allow background execution (exec disabled).');
$this->addFlash('error', 'Ingest konnte nicht asynchron gestartet werden (exec deaktiviert).');
return $this->redirectToRoute('admin_document_show', [
@@ -272,9 +279,16 @@ class DocumentController extends AbstractController
)]
public function resetCompleteSystem(ParameterBagInterface $params, Connection $connection): ?RedirectResponse
{
@unlink($params->get('mto.vector.data.path') . '/index.ndjson');
@unlink($params->get('mto.vector.data.path') . '/vector.index');
@unlink($params->get('mto.vector.data.path') . '/vector.index.meta.json');
if (!function_exists('exec')) {
$this->addFlash('danger', 'Der Reset konnte nicht gestartet werden (exec deaktiviert).');
return $this->redirectToRoute('admin_dashboard');
}
@unlink($params->get('mto.vector.data.ndjson.path'));
@unlink($params->get('mto.vector.data.vector_index.path'));
@unlink($params->get('mto.vector.data.vector_index_meta_json.path'));
exec('rm -rf ' . $params->get('mto.vector.data.upload.path'));
$sql = '
SET FOREIGN_KEY_CHECKS = 0;
TRUNCATE TABLE db.document;
@@ -287,6 +301,8 @@ class DocumentController extends AbstractController
SET FOREIGN_KEY_CHECKS = 1;
';
$connection->executeQuery($sql);
$this->addFlash('success', 'Das System wurde erfolgreich zurückgesetzt.');
return $this->redirectToRoute('admin_dashboard');
}
}

View File

@@ -16,11 +16,21 @@
<hr class="border-secondary">
<form method="post" action="/admin/documents/reset" class="text-danger" onsubmit="return resetSystem()">
<div class="text-light">
<p class="fw-bold">Reset des Systems</p>
<p>Unwiderruflicher Reset des gesamten Systems</p>
<button type="submit" class="btn btn-outline-danger">Reset System</button>
</form>
{% for label, messages in app.flashes %}
{% for message in messages %}
<div class="alert alert-{{ label }} alert-{{ label}} fade show" role="alert">
{{ message }}
</div>
{% endfor %}
{% endfor %}
<form method="post" action="/admin/documents/reset" onsubmit="return resetSystem()">
<button type="submit" class="btn btn-outline-danger">Reset System</button>
</form>
</div>
</div>
</div>

View File

@@ -86,21 +86,21 @@
<div id="job-error" class="alert alert-danger mt-3" style="display:none;"></div>
{% if job.errorMessage %}
<div class="alert alert-danger mt-3">
<strong>Fehler:</strong><br>
{{ job.errorMessage }}
</div>
{% endif %}
{% if job.errorMessage %}
<div class="alert alert-danger mt-3">
<strong>Fehler:</strong><br>
{{ job.errorMessage }}
</div>
{% endif %}
{% if job.logPath %}
<div class="mt-3">
<strong>Log Datei:</strong><br>
<code>{{ job.logPath }}</code>
</div>
{% endif %}
{% if job.logPath %}
<div class="mt-3">
<strong>Log Datei:</strong><br>
<code>{{ job.logPath }}</code>
</div>
{% endif %}
</div>
</div>
</div>
<script>