mirror of
https://github.com/alchemy-fr/Phraseanet.git
synced 2025-10-18 07:23:13 +00:00
Merge pull request #1612 from jygaulier/PHRAS-846_tasks-logs
Phras 846 tasks logs
This commit is contained in:
@@ -181,13 +181,13 @@ class TaskManagerController extends Controller
|
||||
/** @var LogFileFactory $factory */
|
||||
$factory = $this->app['task-manager.log-file.factory'];
|
||||
$logFile = $factory->forManager();
|
||||
if ($request->query->get('clr')) {
|
||||
$logFile->clear();
|
||||
if ($request->query->get('clr') && $request->query->get('version') !== null) {
|
||||
$logFile->clear($request->query->get('version'));
|
||||
}
|
||||
|
||||
return $this->render('admin/task-manager/log.html.twig', [
|
||||
return $this->render('admin/task-manager/log_scheduler.html.twig', [
|
||||
'logfile' => $logFile,
|
||||
'logname' => 'Scheduler',
|
||||
'version' => $request->query->get('version')
|
||||
]);
|
||||
}
|
||||
|
||||
@@ -196,13 +196,13 @@ class TaskManagerController extends Controller
|
||||
/** @var LogFileFactory $factory */
|
||||
$factory = $this->app['task-manager.log-file.factory'];
|
||||
$logFile = $factory->forTask($task);
|
||||
if ($request->query->get('clr')) {
|
||||
$logFile->clear();
|
||||
if ($request->query->get('clr') && $request->query->get('version') !== null) {
|
||||
$logFile->clear($request->query->get('version'));
|
||||
}
|
||||
|
||||
return $this->render('admin/task-manager/log.html.twig', [
|
||||
return $this->render('admin/task-manager/log_task.html.twig', [
|
||||
'logfile' => $logFile,
|
||||
'logname' => sprintf('%s (task id %d)', $task->getName(), $task->getId()),
|
||||
'version' => $request->query->get('version')
|
||||
]);
|
||||
}
|
||||
|
||||
|
@@ -34,11 +34,11 @@ abstract class AbstractLogFile implements LogFileInterface
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function getContent()
|
||||
public function getContent($version = '')
|
||||
{
|
||||
$path = $this->getPath();
|
||||
$path = $this->getPath($version);
|
||||
if (is_file($path)) {
|
||||
return file_get_contents($this->getPath());
|
||||
return file_get_contents($this->getPath($version));
|
||||
}
|
||||
|
||||
return '';
|
||||
@@ -47,9 +47,9 @@ abstract class AbstractLogFile implements LogFileInterface
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function getContentStream()
|
||||
public function getContentStream($version = '')
|
||||
{
|
||||
$path = $this->getPath();
|
||||
$path = $this->getPath($version);
|
||||
|
||||
return function () use ($path) {
|
||||
$handle = fopen($path, 'r');
|
||||
@@ -64,8 +64,17 @@ abstract class AbstractLogFile implements LogFileInterface
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function clear()
|
||||
public function clear($version = '')
|
||||
{
|
||||
file_put_contents($this->getPath(), '');
|
||||
file_put_contents($this->getPath($version), sprintf("[%s] File cleared\n", date(\DateTime::ATOM)));
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function versionExists($version)
|
||||
{
|
||||
return file_exists($this->getPath($version));
|
||||
}
|
||||
|
||||
}
|
||||
|
@@ -14,30 +14,53 @@ namespace Alchemy\Phrasea\TaskManager\Log;
|
||||
interface LogFileInterface
|
||||
{
|
||||
/**
|
||||
* Returns the path to the logfile.
|
||||
* Returns versions (suffixes due to logrotate) of the logfiles.
|
||||
* ex. foo.log --> ""
|
||||
* bar-2015-12-25.log --> "2015-12-25"
|
||||
*
|
||||
* @return string
|
||||
* @return string[]
|
||||
*/
|
||||
public function getPath();
|
||||
public function getVersions();
|
||||
|
||||
/**
|
||||
* Returns the content of the logfile.
|
||||
* Returns the path of a logfile.
|
||||
*
|
||||
* @param string $version
|
||||
* @return string
|
||||
*/
|
||||
public function getContent();
|
||||
public function getPath($version = '');
|
||||
|
||||
/**
|
||||
* Streams the content of the logfile.
|
||||
* Returns the content of a logfile.
|
||||
*
|
||||
* @param string $version
|
||||
* @return string
|
||||
*/
|
||||
public function getContent($version = '');
|
||||
|
||||
/**
|
||||
* Streams the content of a logfile.
|
||||
*
|
||||
* This methods returns a closure that echoes the output.
|
||||
*
|
||||
* @param string $version
|
||||
* @return Closure
|
||||
*/
|
||||
public function getContentStream();
|
||||
public function getContentStream($version = '');
|
||||
|
||||
/**
|
||||
* Clears the content of the logfile.
|
||||
* Clears the content of a logfile.
|
||||
*
|
||||
* @param string $version
|
||||
*/
|
||||
public function clear();
|
||||
public function clear($version = '');
|
||||
|
||||
/**
|
||||
* Returns true if the logfile exists
|
||||
*
|
||||
* @param $version
|
||||
* @return bool
|
||||
*/
|
||||
public function versionExists($version);
|
||||
|
||||
}
|
||||
|
@@ -11,13 +11,34 @@
|
||||
|
||||
namespace Alchemy\Phrasea\TaskManager\Log;
|
||||
|
||||
use Symfony\Component\Finder\Finder;
|
||||
use Symfony\Component\Finder\SplFileInfo;
|
||||
|
||||
class ManagerLogFile extends AbstractLogFile implements LogFileInterface
|
||||
{
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function getPath()
|
||||
public function getVersions()
|
||||
{
|
||||
return sprintf('%s/scheduler.log', $this->root);
|
||||
$x = '/^scheduler(|(-.*))\.log$/';
|
||||
$f = new Finder();
|
||||
$versions = [];
|
||||
/** @var \SplFileInfo $file */
|
||||
foreach($f->files()->in($this->root) as $file) {
|
||||
$matches = [];
|
||||
if(preg_match($x, $file->getBasename(), $matches)) {
|
||||
$versions[] = $matches[1];
|
||||
}
|
||||
}
|
||||
return $versions;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function getPath($version = '')
|
||||
{
|
||||
return sprintf('%s/scheduler%s.log', $this->root, $version);
|
||||
}
|
||||
}
|
||||
|
@@ -12,6 +12,8 @@
|
||||
namespace Alchemy\Phrasea\TaskManager\Log;
|
||||
|
||||
use Alchemy\Phrasea\Model\Entities\Task;
|
||||
use Symfony\Component\Finder\Finder;
|
||||
use Symfony\Component\Finder\SplFileInfo;
|
||||
|
||||
class TaskLogFile extends AbstractLogFile implements LogFileInterface
|
||||
{
|
||||
@@ -24,6 +26,24 @@ class TaskLogFile extends AbstractLogFile implements LogFileInterface
|
||||
$this->task = $task;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function getVersions()
|
||||
{
|
||||
$x = sprintf('/^task_%d(|(-.*))\.log$/', $this->task->getId());
|
||||
$f = new Finder();
|
||||
$versions = [];
|
||||
/** @var \SplFileInfo $file */
|
||||
foreach($f->files()->in($this->root) as $file) {
|
||||
$matches = [];
|
||||
if(preg_match($x, $file->getBasename(), $matches)) {
|
||||
$versions[] = $matches[1];
|
||||
}
|
||||
}
|
||||
return $versions;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the related Task entity.
|
||||
*
|
||||
@@ -37,8 +57,9 @@ class TaskLogFile extends AbstractLogFile implements LogFileInterface
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function getPath()
|
||||
public function getPath($version = '')
|
||||
{
|
||||
return sprintf('%s/task_%d.log', $this->root, $this->task->getId());
|
||||
return sprintf('%s/task_%d%s.log', $this->root, $this->task->getId(), $version);
|
||||
}
|
||||
|
||||
}
|
||||
|
@@ -1,12 +0,0 @@
|
||||
<h4>
|
||||
<a href="{{ path('admin_tasks_list') }} ">
|
||||
< {{ 'Return' | trans }}
|
||||
</a>
|
||||
{{ logname }}
|
||||
<a href="{{ path('admin_tasks_scheduler_log', { 'clr' : logfile.getPath() }) }} ">
|
||||
{{ 'Clear' | trans }}
|
||||
</a>
|
||||
</h4>
|
||||
<pre>
|
||||
{{ logfile.getContent() }}
|
||||
</pre>
|
22
templates/web/admin/task-manager/log_scheduler.html.twig
Normal file
22
templates/web/admin/task-manager/log_scheduler.html.twig
Normal file
@@ -0,0 +1,22 @@
|
||||
{% if version is null and logfile.versionExists('') %}
|
||||
{% set version = '' %}
|
||||
{% endif %}
|
||||
|
||||
<h4>
|
||||
sheduler log
|
||||
{% if version is not null %}
|
||||
version {{ version ? version : "(now)" }}
|
||||
{% endif %}
|
||||
</h4>
|
||||
|
||||
{% for v in logfile.getVersions() %}
|
||||
<a href="{{ path('admin_tasks_scheduler_log', {'version' : v }) }}">{{ v ? v : "(now)" }}</a>
|
||||
|
||||
{% endfor %}
|
||||
|
||||
{% if version is not null %}
|
||||
<pre>{{ logfile.getContent(version) }}</pre>
|
||||
<a href="{{ path('admin_tasks_scheduler_log', {'version' : version, 'clr':'1' }) }} ">
|
||||
{{ 'Clear' | trans }}
|
||||
</a>
|
||||
{% endif %}
|
22
templates/web/admin/task-manager/log_task.html.twig
Normal file
22
templates/web/admin/task-manager/log_task.html.twig
Normal file
@@ -0,0 +1,22 @@
|
||||
{% if version is null and logfile.versionExists('') %}
|
||||
{% set version = '' %}
|
||||
{% endif %}
|
||||
|
||||
<h4>
|
||||
{{ logfile.getTask().getName() }} (task id {{ logfile.getTask.getId() }})
|
||||
{% if version is not null %}
|
||||
version {{ version ? version : "(now)" }}
|
||||
{% endif %}
|
||||
</h4>
|
||||
|
||||
{% for v in logfile.getVersions() %}
|
||||
<a href="{{ path('admin_tasks_task_log', {'task':logfile.getTask.getId(), 'version' : v }) }}">{{ v ? v : "(now)" }}</a>
|
||||
|
||||
{% endfor %}
|
||||
|
||||
{% if version is not null %}
|
||||
<pre>{{ logfile.getContent(version) }}</pre>
|
||||
<a href="{{ path('admin_tasks_task_log', {'task':logfile.getTask.getId(), 'version' : version, 'clr':'1' }) }} ">
|
||||
{{ 'Clear' | trans }}
|
||||
</a>
|
||||
{% endif %}
|
@@ -60,7 +60,9 @@ abstract class LogFileTestCase extends \PhraseanetTestCase
|
||||
$log = $this->getLogFile($this->root);
|
||||
file_put_contents($log->getPath(), 'hello world');
|
||||
$log->clear();
|
||||
$this->assertSame('', $log->getContent());
|
||||
$matches = [];
|
||||
$this->assertEquals(1, preg_match('/^\[(.*)\] File cleared/', $log->getContent(), $matches));
|
||||
$this->assertDateAtom($matches[1]);
|
||||
}
|
||||
|
||||
/**
|
||||
|
Reference in New Issue
Block a user