tao-test/app/taoTaskQueue/model/Entity/TaskLogEntity.php

295 lines
8.0 KiB
PHP

<?php
/**
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; under version 2
* of the License (non-upgradable).
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
* Copyright (c) 2017-2021 (original work) Open Assessment Technologies SA (under the project TAO-PRODUCT);
*
*/
namespace oat\taoTaskQueue\model\Entity;
use common_exception_Error;
use common_report_Report as Report;
use DateTime;
use oat\oatbox\reporting\Report as NewReport;
use oat\tao\model\taskQueue\TaskLog\Entity\TaskLogEntity as BaseTaskLogEntity;
use oat\taoTaskQueue\model\TaskLogBroker\TaskLogBrokerInterface;
use oat\taoTaskQueue\model\ValueObjects\TaskLogCategorizedStatus;
/**
* @deprecated Use \oat\tao\model\taskQueue\TaskLog\Entity\TaskLogEntity
*/
class TaskLogEntity extends BaseTaskLogEntity implements TaskLogEntityInterface
{
/** @var string */
private $id;
/** @var string */
private $parentId;
/** @var string */
private $taskName;
/** @var array */
private $parameters;
/** @var string */
private $label;
/** @var TaskLogCategorizedStatus */
private $status;
/** @var bool */
private $masterStatus;
/** @var string */
private $owner;
/** @var Report */
private $report;
/** @var DateTime */
private $createdAt;
/** @var DateTime */
private $updatedAt;
/**
* TaskLogEntity constructor.
*
* @param string $id
* @param string $parentId
* @param string $taskName
* @param TaskLogCategorizedStatus $status
* @param boolean $masterStatus
* @param array $parameters
* @param string $label
* @param string $owner
* @param DateTime|null $createdAt
* @param DateTime|null $updatedAt
* @param Report|null $report
*/
public function __construct(
$id,
$parentId,
$taskName,
TaskLogCategorizedStatus $status,
array $parameters,
$label,
$owner,
DateTime $createdAt = null,
DateTime $updatedAt = null,
Report $report = null,
$masterStatus = false
) {
$this->id = $id;
$this->parentId = $parentId;
$this->taskName = $taskName;
$this->status = $status;
$this->parameters = $parameters;
$this->label = $label;
$this->owner = $owner;
$this->report = $report;
$this->createdAt = $createdAt;
$this->updatedAt = $updatedAt;
$this->masterStatus = $masterStatus;
}
/**
* @param array $row
* @param string $dateFormat
* @return TaskLogEntity
* @throws common_exception_Error
*/
public static function createFromArray(array $row, string $dateFormat = 'Y-m-d H:i:s')
{
return new self(
$row[TaskLogBrokerInterface::COLUMN_ID],
$row[TaskLogBrokerInterface::COLUMN_PARENT_ID],
$row[TaskLogBrokerInterface::COLUMN_TASK_NAME],
TaskLogCategorizedStatus::createFromString($row[TaskLogBrokerInterface::COLUMN_STATUS]),
isset($row[TaskLogBrokerInterface::COLUMN_PARAMETERS]) ? json_decode($row[TaskLogBrokerInterface::COLUMN_PARAMETERS], true) : [],
isset($row[TaskLogBrokerInterface::COLUMN_LABEL]) ? $row[TaskLogBrokerInterface::COLUMN_LABEL] : '',
isset($row[TaskLogBrokerInterface::COLUMN_OWNER]) ? $row[TaskLogBrokerInterface::COLUMN_OWNER] : '',
isset($row[TaskLogBrokerInterface::COLUMN_CREATED_AT]) ? DateTime::createFromFormat($dateFormat, $row[TaskLogBrokerInterface::COLUMN_CREATED_AT], new \DateTimeZone('UTC')) : null,
isset($row[TaskLogBrokerInterface::COLUMN_UPDATED_AT]) ? DateTime::createFromFormat($dateFormat, $row[TaskLogBrokerInterface::COLUMN_UPDATED_AT], new \DateTimeZone('UTC')) : null,
NewReport::jsonUnserialize($row[TaskLogBrokerInterface::COLUMN_REPORT]),
isset($row[TaskLogBrokerInterface::COLUMN_MASTER_STATUS]) ? $row[TaskLogBrokerInterface::COLUMN_MASTER_STATUS] : false
);
}
/**
* @return string
*/
public function getId()
{
return $this->id;
}
/**
* @return string
*/
public function getParentId()
{
return $this->parentId;
}
/**
* @return string
*/
public function getTaskName()
{
return $this->taskName;
}
/**
* @return array
*/
public function getParameters()
{
return $this->parameters;
}
/**
* @return string
*/
public function getLabel()
{
return $this->label;
}
/**
* @return string
*/
public function getOwner()
{
return $this->owner;
}
/**
* @return Report|null
*/
public function getReport()
{
return $this->report;
}
/**
* @return DateTime|null
*/
public function getCreatedAt()
{
return $this->createdAt;
}
/**
* @return DateTime|null
*/
public function getUpdatedAt()
{
return $this->updatedAt;
}
/**
* @return TaskLogCategorizedStatus
*/
public function getStatus()
{
return $this->status;
}
/**
* @return boolean
*/
public function isMasterStatus()
{
return (bool) $this->masterStatus;
}
/**
* Returns the file name from the generated report.
*
* CAUTION: it is not 100% sure that the returned string is really a file name because different reports set different values as data.
* So this return value can be any kind of string. Please check the file whether it exist or not before usage.
*
* @return string
*/
public function getFileNameFromReport()
{
$filename = '';
if ($this->getStatus()->isFailed() || is_null($this->getReport())) {
return $filename;
}
/** @var Report $successReport */
foreach ($this->getReport()->getSuccesses() as $successReport) {
$data = $successReport->getData();
if (is_string($data)) {
$filename = $data;
break;
}
}
return $filename;
}
/**
* @return array
*/
public function jsonSerialize()
{
return $this->toArray();
}
/**
* @return array
*/
public function toArray()
{
// add basic fields which always have values
$rs = [
'id' => $this->id,
'taskName' => $this->taskName,
'status' => (string) $this->status,
'masterStatus' => (bool) $this->masterStatus,
'statusLabel' => $this->status->getLabel()
];
// add other fields only if they have values
if ($this->label) {
$rs['taskLabel'] = $this->label;
}
if ($this->createdAt instanceof \DateTime) {
$rs['createdAt'] = $this->createdAt->getTimestamp();
$rs['createdAtElapsed'] = (new \DateTime('now', new \DateTimeZone('UTC')))->getTimestamp() - $this->createdAt->getTimestamp();
}
if ($this->updatedAt instanceof \DateTime) {
$rs['updatedAt'] = $this->updatedAt->getTimestamp();
$rs['updatedAtElapsed'] = (new \DateTime('now', new \DateTimeZone('UTC')))->getTimestamp() - $this->updatedAt->getTimestamp();
}
if ($this->report instanceof Report) {
$rs['report'] = $this->report->toArray();
}
return $rs;
}
}