From 069161966ac5ba57e6760ca3a3c9fae7c68f52af Mon Sep 17 00:00:00 2001 From: Christoph Lehmann Date: Sun, 15 Sep 2019 19:38:15 +0200 Subject: [PATCH 1/7] Task: Integrate checks --- Classes/Domain/Model/Check.php | 110 +++++ Classes/Domain/Model/Rule.php | 112 +++++ Classes/Domain/Repository/RuleRepository.php | 6 + Classes/Resolver/BaseResolver.php | 56 +++ Classes/Resolver/ComposerVersionResolver.php | 17 + Classes/Resolver/ConfigurationResolver.php | 39 ++ Classes/Resolver/CoreVersionResolver.php | 12 + Classes/Resolver/ExtensionStateResolver.php | 27 ++ Classes/Resolver/ExtensionVersionResolver.php | 11 + Classes/Resolver/ResolverInterface.php | 13 + Classes/Service/CheckExecutor.php | 95 ++++ Classes/Service/Import/ClientImport.php | 25 +- Classes/Utility/TcaUtility.php | 16 + .../tx_t3monitoring_domain_model_check.php | 158 +++++++ .../TCA/tx_t3monitoring_domain_model_rule.php | 115 +++++ Resources/Private/Language/locallang_db.xlf | 422 ++++++++++-------- .../tx_t3monitoring_domain_model_check.gif | Bin 0 -> 230 bytes .../tx_t3monitoring_domain_model_rule.gif | Bin 0 -> 533 bytes ext_localconf.php | 5 + ext_tables.sql | 64 +++ 20 files changed, 1104 insertions(+), 199 deletions(-) create mode 100644 Classes/Domain/Model/Check.php create mode 100644 Classes/Domain/Model/Rule.php create mode 100644 Classes/Domain/Repository/RuleRepository.php create mode 100644 Classes/Resolver/BaseResolver.php create mode 100644 Classes/Resolver/ComposerVersionResolver.php create mode 100644 Classes/Resolver/ConfigurationResolver.php create mode 100644 Classes/Resolver/CoreVersionResolver.php create mode 100644 Classes/Resolver/ExtensionStateResolver.php create mode 100644 Classes/Resolver/ExtensionVersionResolver.php create mode 100644 Classes/Resolver/ResolverInterface.php create mode 100644 Classes/Service/CheckExecutor.php create mode 100644 Classes/Utility/TcaUtility.php create mode 100644 Configuration/TCA/tx_t3monitoring_domain_model_check.php create mode 100644 Configuration/TCA/tx_t3monitoring_domain_model_rule.php create mode 100644 Resources/Public/Icons/tx_t3monitoring_domain_model_check.gif create mode 100644 Resources/Public/Icons/tx_t3monitoring_domain_model_rule.gif diff --git a/Classes/Domain/Model/Check.php b/Classes/Domain/Model/Check.php new file mode 100644 index 0000000..2f1d0fc --- /dev/null +++ b/Classes/Domain/Model/Check.php @@ -0,0 +1,110 @@ +title; + } + + /** + * @param string $title + */ + public function setTitle(string $title) + { + $this->title = $title; + } + + /** + * @return string + */ + public function getType(): string + { + return $this->type; + } + + /** + * @param string $type + */ + public function setType(string $type) + { + $this->type = $type; + } + + /** + * @return string + */ + public function getArgument(): string + { + return $this->argument; + } + + /** + * @param string $argument + */ + public function setArgument(string $argument) + { + $this->argument = $argument; + } + + /** + * @return string + */ + public function getOperator(): string + { + return $this->operator; + } + + /** + * @param string $operator + */ + public function setOperator(string $operator) + { + $this->operator = $operator; + } + + /** + * @return string + */ + public function getValue(): string + { + return $this->value; + } + + /** + * @param string $value + */ + public function setValue(string $value) + { + $this->value = $value; + } +} diff --git a/Classes/Domain/Model/Rule.php b/Classes/Domain/Model/Rule.php new file mode 100644 index 0000000..be34781 --- /dev/null +++ b/Classes/Domain/Model/Rule.php @@ -0,0 +1,112 @@ + + */ + protected $executionCriteria = null; + + /** + * @var \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\T3Monitor\T3monitoring\Domain\Model\Check> + */ + protected $failureCriteria = null; + + /** + * @var string + */ + protected $messageCategory; + + /** + * @return \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\T3Monitor\T3monitoring\Domain\Model\Check> executionCriteria + */ + public function getExecutionCriteria() + { + return $this->executionCriteria; + } + + /** + * @param \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\T3Monitor\T3monitoring\Domain\Model\Check> $executionCriteria + * @return void + */ + public function setExecutionCriteria(\TYPO3\CMS\Extbase\Persistence\ObjectStorage $executionCriteria) + { + $this->executionCriteria = $executionCriteria; + } + + /** + * @return \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\T3Monitor\T3monitoring\Domain\Model\Check> failureCriteria + */ + public function getFailureCriteria() + { + return $this->failureCriteria; + } + + /** + * @param \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\T3Monitor\T3monitoring\Domain\Model\Check> $failureCriteria + * @return void + */ + public function setFailureCriteria(\TYPO3\CMS\Extbase\Persistence\ObjectStorage $failureCriteria) + { + $this->failureCriteria = $failureCriteria; + } + + /** + * @return string + */ + public function getTitle(): string + { + return $this->title; + } + + /** + * @param string $title + */ + public function setTitle(string $title) + { + $this->title = $title; + } + + /** + * @return string + */ + public function getDescription(): string + { + return $this->description; + } + + /** + * @param string $description + */ + public function setDescription(string $description) + { + $this->description = $description; + } + + /** + * @return string + */ + public function getMessageCategory(): string + { + return $this->messageCategory; + } + + /** + * @param string $messageCategory + */ + public function setMessageCategory(string $messageCategory) + { + $this->messageCategory = $messageCategory; + } +} \ No newline at end of file diff --git a/Classes/Domain/Repository/RuleRepository.php b/Classes/Domain/Repository/RuleRepository.php new file mode 100644 index 0000000..9a0e7de --- /dev/null +++ b/Classes/Domain/Repository/RuleRepository.php @@ -0,0 +1,6 @@ +argument = $check->getArgument(); + $this->operator = $check->getOperator(); + $this->value = $check->getValue(); + } + + public function setClientResponse(array $json) { + $this->json = $json; + } + + public function setValueForComparison() { + } + + public function execute(): ?bool + { + $result = call_user_func_array([$this, $this->operator . 'Operator'], []); + + if (is_bool($result) === false) { + throw new \Exception('Return value from operator function must be a boolean', 1568057811); + } + + return $result; + } + + public function getProviderArguments() + { + } +} \ No newline at end of file diff --git a/Classes/Resolver/ComposerVersionResolver.php b/Classes/Resolver/ComposerVersionResolver.php new file mode 100644 index 0000000..aae6f0a --- /dev/null +++ b/Classes/Resolver/ComposerVersionResolver.php @@ -0,0 +1,17 @@ +valueForComparison, $this->value); + } + + public function matchesNotVersionOperator() + { + return !Semver::satisfies($this->valueForComparison, $this->value); + } +} \ No newline at end of file diff --git a/Classes/Resolver/ConfigurationResolver.php b/Classes/Resolver/ConfigurationResolver.php new file mode 100644 index 0000000..22e2f4d --- /dev/null +++ b/Classes/Resolver/ConfigurationResolver.php @@ -0,0 +1,39 @@ +json['configuration'][$this->argument])) { + $this->valueForComparison = $this->json['configuration'][$this->argument]; + } + } + + public function getProviderArguments() + { + return $this->argument; + } + + public function isFalseOperator(): bool + { + return (bool)$this->valueForComparison === false; + } + + public function isTrueOperator(): bool + { + return (bool)$this->valueForComparison === true; + } + + public function isOperator(): bool + { + return $this->valueForComparison === $this->value; + } + + public function isNotOperator(): bool + { + return $this->valueForComparison !== $this->value; + } +} \ No newline at end of file diff --git a/Classes/Resolver/CoreVersionResolver.php b/Classes/Resolver/CoreVersionResolver.php new file mode 100644 index 0000000..647b0e0 --- /dev/null +++ b/Classes/Resolver/CoreVersionResolver.php @@ -0,0 +1,12 @@ +valueForComparison = $this->json['core']['typo3Version']; + } +} \ No newline at end of file diff --git a/Classes/Resolver/ExtensionStateResolver.php b/Classes/Resolver/ExtensionStateResolver.php new file mode 100644 index 0000000..281a2ec --- /dev/null +++ b/Classes/Resolver/ExtensionStateResolver.php @@ -0,0 +1,27 @@ +argument, $this->json['extensions']); + } + + public function isNotPresentOperator() : bool + { + return !in_array($this->argument, $this->json['extensions']); + } + + public function isLoadedOperator() : bool + { + return (bool)$this->json['extensions'][$this->argument]['isLoaded'] === true; + } + + public function isNotLoadedOperator() : bool + { + return (bool)$this->json['extensions'][$this->argument]['isLoaded'] === false; + } +} \ No newline at end of file diff --git a/Classes/Resolver/ExtensionVersionResolver.php b/Classes/Resolver/ExtensionVersionResolver.php new file mode 100644 index 0000000..237c241 --- /dev/null +++ b/Classes/Resolver/ExtensionVersionResolver.php @@ -0,0 +1,11 @@ +valueForComparison = $this->json['extensions'][$this->argument]['version']; + } +} \ No newline at end of file diff --git a/Classes/Resolver/ResolverInterface.php b/Classes/Resolver/ResolverInterface.php new file mode 100644 index 0000000..2a76c99 --- /dev/null +++ b/Classes/Resolver/ResolverInterface.php @@ -0,0 +1,13 @@ +rules = $ruleRepository->findAll(); + } + + public function getProviderArguments() + { + if ($this->providerArguments) { + return $this->providerArguments; + } + + $allProviderArguments = []; + $checks = []; + foreach ($this->rules as $rule) { + foreach ($rule->getFailureCriteria() as $check) { + $checks[$check->getUid()] = $check; + } + foreach ($rule->getExecutionCriteria() as $check) { + $checks[$check->getUid()] = $check; + } + } + foreach ($checks as $check) { + $providerArguments = $this->getResolver($check)->getProviderArguments(); + if ($providerArguments) { + $allProviderArguments[$check->getType()][] = $providerArguments; + } + } + + $this->providerArguments = $allProviderArguments; + return $allProviderArguments; + } + + public function applyRulesAndModifyClientData(&$json) + { + $this->json = $json; + foreach ($this->rules as $rule) { + $executionCriterias = $rule->getExecutionCriteria(); + if (count($executionCriterias) === 0 || $this->checkCriterias($executionCriterias) === true) { + if ($this->checkCriterias($rule->getFailureCriteria()) === true) { + $json['extra'][$rule->getMessageCategory()][$rule->getTitle()] = $rule->getDescription(); + } + } + } + } + + protected function checkCriterias($criterias): bool + { + $result = false; + if ($criterias) { + foreach ($criterias as $criteria) { + if ($result === true) { + break; + } + $result = $this->runCheck($criteria); + } + } + return $result; + } + + protected function runCheck(Check $check): bool + { + $resolver = $this->getResolver($check); + $resolver->setClientResponse($this->json); + $resolver->setValueForComparison(); + return $resolver->execute(); + } + + protected function getResolver(Check $check): ResolverInterface + { + $resolverClass = $GLOBALS['TYPO3_CONF_VARS']['EXT']['t3monitoring']['resolver'][$check->getType()]; + $resolver = GeneralUtility::makeInstance($resolverClass, $check); + return $resolver; + } +} \ No newline at end of file diff --git a/Classes/Service/Import/ClientImport.php b/Classes/Service/Import/ClientImport.php index 131ea1f..092594b 100644 --- a/Classes/Service/Import/ClientImport.php +++ b/Classes/Service/Import/ClientImport.php @@ -13,6 +13,7 @@ use T3Monitor\T3monitoring\Domain\Model\Extension; use T3Monitor\T3monitoring\Notification\EmailNotification; use T3Monitor\T3monitoring\Service\DataIntegrity; +use T3Monitor\T3monitoring\Service\CheckExecutor; use TYPO3\CMS\Core\Database\Connection; use TYPO3\CMS\Core\Database\ConnectionPool; use TYPO3\CMS\Core\Http\RequestFactory; @@ -20,6 +21,7 @@ use TYPO3\CMS\Core\Utility\GeneralUtility; use TYPO3\CMS\Core\Utility\StringUtility; use TYPO3\CMS\Core\Utility\VersionNumberUtility; +use TYPO3\CMS\Extbase\Object\ObjectManager; /** * Class ClientImport @@ -28,6 +30,10 @@ class ClientImport extends BaseImport { const TABLE = 'tx_t3monitoring_domain_model_client'; + const MESSAGE_INFO = 'info'; + const MESSAGE_WARNING = 'warning'; + const MESSAGE_DANGER = 'danger'; + /** @var array */ protected $coreVersions = []; @@ -37,9 +43,12 @@ class ClientImport extends BaseImport /** @var array */ protected $failedClients = []; - /** @var EmailNotification */ + /** @var EmailNotification */ protected $emailNotification; + /** @var CheckExecutor */ + protected $checkExecutor; + /** * Constructor */ @@ -47,6 +56,10 @@ public function __construct() { $this->coreVersions = $this->getAllCoreVersions(); $this->emailNotification = GeneralUtility::makeInstance(EmailNotification::class); + + $objectManager = GeneralUtility::makeInstance(ObjectManager::class); + $this->checkExecutor = $objectManager->get(CheckExecutor::class); + parent::__construct(); } @@ -123,9 +136,10 @@ protected function importSingleClient(array $row) 'error_count' => 0 ]; - $this->addExtraData($json, $update, 'info'); - $this->addExtraData($json, $update, 'warning'); - $this->addExtraData($json, $update, 'danger'); + $this->checkExecutor->applyRulesAndModifyClientData($json); + $this->addExtraData($json, $update, self::MESSAGE_INFO); + $this->addExtraData($json, $update, self::MESSAGE_WARNING); + $this->addExtraData($json, $update, self::MESSAGE_DANGER); $connection = GeneralUtility::makeInstance(ConnectionPool::class) ->getConnectionForTable(self::TABLE); @@ -199,6 +213,7 @@ protected function requestClientData(array $row) 'headers' => $headers, 'allow_redirects' => true, 'verify' => (bool)!$row['ignore_cert_errors'], + 'form_params' => $this->checkExecutor->getProviderArguments() ]; if (!empty($row['basic_auth_username']) && !empty($row['basic_auth_password'])) { $additionalOptions['auth'] = [ $row['basic_auth_username'], $row['basic_auth_password'] ]; @@ -206,7 +221,7 @@ protected function requestClientData(array $row) if (!empty($row['force_ip_resolve'])) { $additionalOptions['force_ip_resolve'] = $row['force_ip_resolve']; } - $response = $requestFactory->request($url, 'GET', $additionalOptions); + $response = $requestFactory->request($url, 'POST', $additionalOptions); if (!empty($response->getReasonPhrase()) && $response->getReasonPhrase() !== 'OK') { throw new \RuntimeException($response->getReasonPhrase()); } diff --git a/Classes/Utility/TcaUtility.php b/Classes/Utility/TcaUtility.php new file mode 100644 index 0000000..0aae846 --- /dev/null +++ b/Classes/Utility/TcaUtility.php @@ -0,0 +1,16 @@ + $class) { + $config['items'][] = [ + $class::TITLE, + $name + ]; + } + return $config; + } +} \ No newline at end of file diff --git a/Configuration/TCA/tx_t3monitoring_domain_model_check.php b/Configuration/TCA/tx_t3monitoring_domain_model_check.php new file mode 100644 index 0000000..286e812 --- /dev/null +++ b/Configuration/TCA/tx_t3monitoring_domain_model_check.php @@ -0,0 +1,158 @@ + [ + 'title' => 'LLL:EXT:t3monitoring/Resources/Private/Language/locallang_db.xlf:tx_t3monitoring_domain_model_check', + 'label' => 'title', + 'default_sortby' => 'title', + 'tstamp' => 'tstamp', + 'crdate' => 'crdate', + 'cruser_id' => 'cruser_id', + 'delete' => 'deleted', + 'type' => 'type', + 'enablecolumns' => [ + 'disabled' => 'hidden', + ], + 'searchFields' => 'title', + 'iconfile' => 'EXT:t3monitoring/Resources/Public/Icons/tx_t3monitoring_domain_model_check.gif' + ], + 'interface' => [ + 'showRecordFieldList' => 'hidden, title, type, argument, operator, value', + ], + 'types' => [ + '1' => [ + 'showitem' => 'hidden, title, type, argument, operator, value', + ], + 'configurationValue' => [ + 'showitem' => 'hidden, title, type, argument, operator, value', + 'columnsOverrides' => [ + 'operator' => [ + 'config' => [ + 'items' => [ + ['is', 'is'], + ['is not', 'isNot'], + ['is true', 'isTrue'], + ['is false', 'isFalse'], + ] + ] + ] + ] + ], + 'coreVersion' => [ + 'showitem' => 'hidden, title, type, operator, value', + 'columnsOverrides' => [ + 'operator' => [ + 'config' => [ + 'items' => [ + ['matches', 'matchesVersion'], + ['does not matches', 'matchesNotVersion'], + ] + ] + ], + 'value' => [ + 'label' => 'Composer version constraint' + ] + ] + ], + 'extensionState' => [ + 'showitem' => 'hidden, title, type, argument, operator', + 'columnsOverrides' => [ + 'operator' => [ + 'config' => [ + 'items' => [ + ['is present', 'isPresent'], + ['is not present', 'isNotPresent'], + ['is loaded', 'isLoaded'], + ['is not loaded', 'isNotLoaded'], + ] + ] + ], + 'argument' => [ + 'label' => 'Extension key' + ] + ] + ], + 'extensionVersion' => [ + 'showitem' => 'hidden, title, type, operator, value', + 'columnsOverrides' => [ + 'operator' => [ + 'config' => [ + 'items' => [ + ['matches', 'matchesVersion'], + ['does not matches', 'matchesNotVersion'], + ] + ] + ], + 'value' => [ + 'label' => 'Composer version constraint' + ] + ] + ], + ], + 'columns' => [ + 'hidden' => [ + 'exclude' => true, + 'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.hidden', + 'config' => [ + 'type' => 'check', + 'items' => [ + '1' => [ + '0' => 'LLL:EXT:lang/Resources/Private/Language/locallang_core.xlf:labels.enabled' + ] + ], + ], + ], + + 'title' => [ + 'exclude' => true, + 'label' => 'LLL:EXT:t3monitoring/Resources/Private/Language/locallang_db.xlf:tx_t3monitoring_domain_model_rule.title', + 'config' => [ + 'type' => 'input', + 'size' => 255, + 'eval' => 'trim' + ], + ], + 'type' => [ + 'exclude' => true, + 'label' => 'LLL:EXT:t3monitoring/Resources/Private/Language/locallang_db.xlf:tx_t3monitoring_domain_model_check.type', + 'config' => [ + 'type' => 'select', + 'renderType' => 'selectSingle', + 'itemsProcFunc' => \T3Monitor\T3monitoring\Utility\TcaUtility::class . '->getCheckTypes', + 'size' => 1, + 'maxitems' => 1, + 'onChange' => 'reload' + ], + ], + 'argument' => [ + 'exclude' => true, + 'label' => 'LLL:EXT:t3monitoring/Resources/Private/Language/locallang_db.xlf:tx_t3monitoring_domain_model_check.argument', + 'config' => [ + 'type' => 'input', + 'size' => 30, + 'eval' => 'trim' + ], + ], + 'operator' => [ + 'exclude' => true, + 'label' => 'LLL:EXT:t3monitoring/Resources/Private/Language/locallang_db.xlf:tx_t3monitoring_domain_model_check.operator', + 'config' => [ + 'required' => 1, + 'type' => 'select', + 'renderType' => 'selectSingle', + 'size' => 1, + 'maxitems' => 1, + 'items' => [] + ], + ], + 'value' => [ + 'exclude' => true, + 'label' => 'LLL:EXT:t3monitoring/Resources/Private/Language/locallang_db.xlf:tx_t3monitoring_domain_model_check.value', + 'config' => [ + 'type' => 'input', + 'size' => 30, + 'eval' => 'trim' + ], + ], + + ], +]; diff --git a/Configuration/TCA/tx_t3monitoring_domain_model_rule.php b/Configuration/TCA/tx_t3monitoring_domain_model_rule.php new file mode 100644 index 0000000..7443171 --- /dev/null +++ b/Configuration/TCA/tx_t3monitoring_domain_model_rule.php @@ -0,0 +1,115 @@ + [ + 'title' => 'LLL:EXT:t3monitoring/Resources/Private/Language/locallang_db.xlf:tx_t3monitoring_domain_model_rule', + 'label' => 'title', + 'default_sortby' => 'title', + 'tstamp' => 'tstamp', + 'crdate' => 'crdate', + 'cruser_id' => 'cruser_id', + 'delete' => 'deleted', + 'enablecolumns' => [ + 'disabled' => 'hidden', + ], + 'searchFields' => 'title', + 'iconfile' => 'EXT:t3monitoring/Resources/Public/Icons/tx_t3monitoring_domain_model_rule.gif' + ], + 'interface' => [ + 'showRecordFieldList' => 'hidden, title, description, message_category, execution_criteria, failure_criteria', + ], + 'types' => [ + '1' => ['showitem' => 'hidden, title, description, message_category, execution_criteria, failure_criteria'], + ], + 'columns' => [ + 'hidden' => [ + 'exclude' => true, + 'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.hidden', + 'config' => [ + 'type' => 'check', + 'items' => [ + '1' => [ + '0' => 'LLL:EXT:lang/Resources/Private/Language/locallang_core.xlf:labels.enabled' + ] + ], + ], + ], + + 'title' => [ + 'exclude' => true, + 'label' => 'LLL:EXT:t3monitoring/Resources/Private/Language/locallang_db.xlf:tx_t3monitoring_domain_model_rule.title', + 'config' => [ + 'type' => 'input', + 'size' => 255, + 'eval' => 'trim' + ], + ], + + 'description' => [ + 'exclude' => true, + 'label' => 'LLL:EXT:t3monitoring/Resources/Private/Language/locallang_db.xlf:tx_t3monitoring_domain_model_rule.description', + 'config' => [ + 'type' => 'text', + 'eval' => 'trim' + ], + ], + 'execution_criteria' => [ + 'exclude' => true, + 'label' => 'LLL:EXT:t3monitoring/Resources/Private/Language/locallang_db.xlf:tx_t3monitoring_domain_model_rule.execution_criteria', + 'config' => [ + 'type' => 'select', + 'renderType' => 'selectMultipleSideBySide', + 'enableMultiSelectFilterTextfield' => true, + 'foreign_table' => 'tx_t3monitoring_domain_model_check', + 'MM' => 'tx_t3monitoring_rule_check_mm', + 'size' => 3, + 'autoSizeMax' => 30, + 'maxitems' => 9999, + 'fieldControl' => [ + 'editPopup' => [ + 'disabled' => false, + ], + 'addRecord' => [ + 'disabled' => false, + ], + ], + ], + + ], + 'failure_criteria' => [ + 'exclude' => true, + 'label' => 'LLL:EXT:t3monitoring/Resources/Private/Language/locallang_db.xlf:tx_t3monitoring_domain_model_rule.failure_criteria', + 'config' => [ + 'type' => 'select', + 'renderType' => 'selectMultipleSideBySide', + 'enableMultiSelectFilterTextfield' => true, + 'foreign_table' => 'tx_t3monitoring_domain_model_check', + 'MM' => 'tx_t3monitoring_rule_failure_criteria_check_mm', + 'size' => 3, + 'autoSizeMax' => 30, + 'maxitems' => 9999, + 'fieldControl' => [ + 'editPopup' => [ + 'disabled' => false, + ], + 'addRecord' => [ + 'disabled' => false, + ], + ], + ], + + ], + 'message_category' => [ + 'exclude' => true, + 'label' => 'LLL:EXT:t3monitoring/Resources/Private/Language/locallang_db.xlf:tx_t3monitoring_domain_model_rule.message_category', + 'config' => [ + 'type' => 'select', + 'size' => 1, + 'items' => [ + ['Information', \T3Monitor\T3monitoring\Service\Import\ClientImport::MESSAGE_INFO], + ['Warning', \T3Monitor\T3monitoring\Service\Import\ClientImport::MESSAGE_WARNING], + ['Dangerous', \T3Monitor\T3monitoring\Service\Import\ClientImport::MESSAGE_DANGER] + ] + ], + ], + ], +]; diff --git a/Resources/Private/Language/locallang_db.xlf b/Resources/Private/Language/locallang_db.xlf index 7d2e143..743358b 100644 --- a/Resources/Private/Language/locallang_db.xlf +++ b/Resources/Private/Language/locallang_db.xlf @@ -1,197 +1,231 @@ - -
- - - Client - - - Title - - - Domain - - - Status - - - Error - - - OK - - - Secret - - - Email - - - Php Version - - - Mysql Version - - - Insecure Core - - - Outdated Core - - - Insecure Extensions - - - Outdated Extensions - - - Error Message - - - Extra Info - - - Extra Warning - - - Extra Danger - - - Last Successful Import - - - Extensions - - - Core - - - Sla - - - Extension - - - Name - - - Version - - - Insecure - - - Next Secure Version - - - Title - - - Description - - - Last Updated - - - Author Name - - - Update Comment - - - State - - - Category - - - Version Integer - - - Is Used - - - Is Official - - - Is Modified - - - Is Latest - - - Last Bugfix Release - - - Last Minor Release - - - Last Major Release - - - Serialized Dependencies - - - Core - - - Version - - - Insecure - - - Next Secure Version - - - Type - - - Release Date - - - Latest - - - Stable - - - Is Stable - - - Is Active - - - Is Latest - - - Version Integer - - - Is Used - - - Is Official - - - Sla - - - Title - - - Description - - - Tag - - - Title - - - Description - - - + +
+ + + Client + + + Title + + + Domain + + + Status + + + Error + + + OK + + + Secret + + + Email + + + Php Version + + + Mysql Version + + + Insecure Core + + + Outdated Core + + + Insecure Extensions + + + Outdated Extensions + + + Error Message + + + Extra Info + + + Extra Warning + + + Extra Danger + + + Last Successful Import + + + Extensions + + + Core + + + Sla + + + Extension + + + Name + + + Version + + + Insecure + + + Next Secure Version + + + Title + + + Description + + + Last Updated + + + Author Name + + + Update Comment + + + State + + + Category + + + Version Integer + + + Is Used + + + Is Official + + + Is Modified + + + Is Latest + + + Last Bugfix Release + + + Last Minor Release + + + Last Major Release + + + Serialized Dependencies + + + Core + + + Version + + + Insecure + + + Next Secure Version + + + Type + + + Release Date + + + Latest + + + Stable + + + Is Stable + + + Is Active + + + Is Latest + + + Version Integer + + + Is Used + + + Is Official + + + Sla + + + Title + + + Description + + + Tag + + + Title + + + Description + + + Rule + + + Title + + + Description + + + Execution Criteria + + + Failure Criteria + + + Message category + + + Check + + + Type + + + Argument + + + Operator: Result must be true to fullfill critera + + + Value for comparison + + + \ No newline at end of file diff --git a/Resources/Public/Icons/tx_t3monitoring_domain_model_check.gif b/Resources/Public/Icons/tx_t3monitoring_domain_model_check.gif new file mode 100644 index 0000000000000000000000000000000000000000..37ba37b9b3a220018e3a291bf2ee413d0da30ce0 GIT binary patch literal 230 zcmZ?wbh9u|6krfwIKlt|GBPr{y1EAX`lY3%Jv}|Mz+f2|Yy*R1U~nA_UV_1QFaYW; z2AhC~Q2fcl$iN`NpaW6^vXg-|S;5tE3G-Y5<#kHRdp8`B$dNv*cXpRhl~&t>ccvU1 zeHPQ2GIn^1cr6p&73IaoD$=91iK~a{(6rVH&ROOxH+%Y4hNqsq`BO~MkEuZ}q3Mby Zn_ZKDm69U|7Z(ptCx?^igb9ia)&LfwP0|1W literal 0 HcmV?d00001 diff --git a/Resources/Public/Icons/tx_t3monitoring_domain_model_rule.gif b/Resources/Public/Icons/tx_t3monitoring_domain_model_rule.gif new file mode 100644 index 0000000000000000000000000000000000000000..6cc5f16355d84652db5ce39fcbc7256b7ea457cd GIT binary patch literal 533 zcmZ?wbhEHb6krfwc;>^PT&ti`uNc2IM6Fr5d*_GlT^}Mg`l>Z4?cBL@{mqr@Zmft{ z7wEdsHlXM1p|kH6En2i~+qT*bFHc_i5WY6x!0ESfTY`5SewDjFA!B!R!NKH=-7#5v z<8pIzr=96jYgDqIV-eVU&ToZld3pKFnKKjS+;FNpvSrJblpPUfQw-u~UN@U;5Wc}@ z$BrEa{W=>rZk&4HOZ}!-d-m*!-W0Ir`qGWJ*7TfcZfa@@UE^PKph&A-&32ZV$71`A zWAz0q9tEs&-?wjHUteGDl80Iy>iRueDs>7`>w{xsV{`V!C+`Sfvt~_7N=o9k(EtDc zGYnRs_>+Z^fx(AC2joCdoG`E#HTX0&x3sqT=(8Hwwzskf@u~E-2#Sa)Om246yZMom0cTFy<3E({D?-?uh0SOWmDq@H{L literal 0 HcmV?d00001 diff --git a/ext_localconf.php b/ext_localconf.php index 49fcb53..b509484 100644 --- a/ext_localconf.php +++ b/ext_localconf.php @@ -11,6 +11,11 @@ function ($extKey) { = \T3Monitor\T3monitoring\Command\ReportCommandController::class; $GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['t3lib/class.t3lib_tcemain.php']['processDatamapClass'][$extKey] = \T3Monitor\T3monitoring\Hooks\DataHandlerHook::class; + + $GLOBALS['TYPO3_CONF_VARS']['EXT'][$extKey]['resolver']['configurationValue'] = \T3Monitor\T3monitoring\Resolver\ConfigurationResolver::class; + $GLOBALS['TYPO3_CONF_VARS']['EXT'][$extKey]['resolver']['extensionState'] = \T3Monitor\T3monitoring\Resolver\ExtensionStateResolver::class; + $GLOBALS['TYPO3_CONF_VARS']['EXT'][$extKey]['resolver']['extensionVersion'] = \T3Monitor\T3monitoring\Resolver\ExtensionVersionResolver::class; + $GLOBALS['TYPO3_CONF_VARS']['EXT'][$extKey]['resolver']['coreVersion'] = \T3Monitor\T3monitoring\Resolver\CoreVersionResolver::class; }, 't3monitoring' ); diff --git a/ext_tables.sql b/ext_tables.sql index 59c43cf..f966251 100644 --- a/ext_tables.sql +++ b/ext_tables.sql @@ -176,3 +176,67 @@ CREATE TABLE tx_t3monitoring_client_extension_mm ( KEY uid_local (uid_local), KEY uid_foreign (uid_foreign) ); + +CREATE TABLE tx_t3monitoring_domain_model_rule ( + + uid int(11) NOT NULL auto_increment, + pid int(11) DEFAULT '0' NOT NULL, + + title varchar(255) DEFAULT '' NOT NULL, + description text, + execution_criteria int(11) unsigned DEFAULT '0' NOT NULL, + failure_criteria int(11) unsigned DEFAULT '0' NOT NULL, + message_category varchar(7) DEFAULT '0' NOT NULL, + + tstamp int(11) unsigned DEFAULT '0' NOT NULL, + crdate int(11) unsigned DEFAULT '0' NOT NULL, + cruser_id int(11) unsigned DEFAULT '0' NOT NULL, + deleted smallint(5) unsigned DEFAULT '0' NOT NULL, + hidden smallint(5) unsigned DEFAULT '0' NOT NULL, + + PRIMARY KEY (uid), + KEY parent (pid) +); + +CREATE TABLE tx_t3monitoring_domain_model_check ( + + uid int(11) NOT NULL auto_increment, + pid int(11) DEFAULT '0' NOT NULL, + + title varchar(255) DEFAULT '' NOT NULL, + type varchar(255) DEFAULT '' NOT NULL, + argument varchar(255) DEFAULT '' NOT NULL, + operator varchar(255) DEFAULT '' NOT NULL, + value varchar(255) DEFAULT '' NOT NULL, + + tstamp int(11) unsigned DEFAULT '0' NOT NULL, + crdate int(11) unsigned DEFAULT '0' NOT NULL, + cruser_id int(11) unsigned DEFAULT '0' NOT NULL, + deleted smallint(5) unsigned DEFAULT '0' NOT NULL, + hidden smallint(5) unsigned DEFAULT '0' NOT NULL, + + PRIMARY KEY (uid), + KEY parent (pid) +); + +CREATE TABLE tx_t3monitoring_rule_check_mm ( + uid_local int(11) unsigned DEFAULT '0' NOT NULL, + uid_foreign int(11) unsigned DEFAULT '0' NOT NULL, + sorting int(11) unsigned DEFAULT '0' NOT NULL, + sorting_foreign int(11) unsigned DEFAULT '0' NOT NULL, + + PRIMARY KEY (uid_local,uid_foreign), + KEY uid_local (uid_local), + KEY uid_foreign (uid_foreign) +); + +CREATE TABLE tx_t3monitoring_rule_failure_criteria_check_mm ( + uid_local int(11) unsigned DEFAULT '0' NOT NULL, + uid_foreign int(11) unsigned DEFAULT '0' NOT NULL, + sorting int(11) unsigned DEFAULT '0' NOT NULL, + sorting_foreign int(11) unsigned DEFAULT '0' NOT NULL, + + PRIMARY KEY (uid_local,uid_foreign), + KEY uid_local (uid_local), + KEY uid_foreign (uid_foreign) +); \ No newline at end of file From a002205f0bfbd935afa444e2e465e6b8c2d8dd11 Mon Sep 17 00:00:00 2001 From: Christoph Lehmann Date: Sun, 22 Sep 2019 18:55:38 +0200 Subject: [PATCH 2/7] Task: Integrate Checks --- Classes/Controller/BaseController.php | 5 + Classes/Controller/StatisticController.php | 3 + Classes/Domain/Model/CheckResult.php | 87 ++++ Classes/Domain/Model/Client.php | 21 + .../Domain/Model/Dto/ClientFilterDemand.php | 39 ++ .../Repository/CheckResultRepository.php | 32 ++ .../Domain/Repository/ClientRepository.php | 50 ++- Classes/Resolver/BaseResolver.php | 16 +- Classes/Resolver/ConfigurationResolver.php | 8 + Classes/Resolver/ResolverInterface.php | 2 +- Classes/Service/CheckExecutor.php | 95 ---- Classes/Service/CheckResultService.php | 129 ++++++ Classes/Service/Import/ClientImport.php | 14 +- ..._t3monitoring_domain_model_checkresult.php | 36 ++ .../tx_t3monitoring_domain_model_client.php | 22 + Resources/Private/Language/locallang.xlf | 9 + Resources/Private/Language/locallang_db.xlf | 6 + Resources/Private/Templates/Client/Show.html | 30 ++ .../Private/Templates/Statistic/Index.html | 417 ++++++++++-------- ext_tables.sql | 27 +- 20 files changed, 757 insertions(+), 291 deletions(-) create mode 100644 Classes/Domain/Model/CheckResult.php create mode 100644 Classes/Domain/Repository/CheckResultRepository.php delete mode 100644 Classes/Service/CheckExecutor.php create mode 100644 Classes/Service/CheckResultService.php create mode 100644 Configuration/TCA/tx_t3monitoring_domain_model_checkresult.php diff --git a/Classes/Controller/BaseController.php b/Classes/Controller/BaseController.php index 7c3dd72..ff8d73e 100644 --- a/Classes/Controller/BaseController.php +++ b/Classes/Controller/BaseController.php @@ -11,6 +11,7 @@ use T3Monitor\T3monitoring\Domain\Model\Dto\ClientFilterDemand; use T3Monitor\T3monitoring\Domain\Model\Dto\EmMonitoringConfiguration; +use T3Monitor\T3monitoring\Domain\Repository\CheckResultRepository; use T3Monitor\T3monitoring\Domain\Repository\ClientRepository; use T3Monitor\T3monitoring\Domain\Repository\CoreRepository; use T3Monitor\T3monitoring\Domain\Repository\StatisticRepository; @@ -39,6 +40,9 @@ class BaseController extends ActionController /** @var StatisticRepository */ protected $statisticRepository; + /** @var CheckResultRepository */ + protected $checkResultRepository; + /** @var ClientRepository */ protected $clientRepository; @@ -67,6 +71,7 @@ public function initializeAction() { $this->statisticRepository = $this->objectManager->get(StatisticRepository::class); $this->filterDemand = $this->objectManager->get(ClientFilterDemand::class); + $this->checkResultRepository = $this->objectManager->get(CheckResultRepository::class); $this->clientRepository = $this->objectManager->get(ClientRepository::class); $this->coreRepository = $this->objectManager->get(CoreRepository::class); $this->iconFactory = GeneralUtility::makeInstance(IconFactory::class); diff --git a/Classes/Controller/StatisticController.php b/Classes/Controller/StatisticController.php index 125665d..c0d6917 100644 --- a/Classes/Controller/StatisticController.php +++ b/Classes/Controller/StatisticController.php @@ -74,6 +74,7 @@ public function indexAction(ClientFilterDemand $filter = null) $outdatedExtensionDemand = $this->getClientFilterDemand()->setWithOutdatedExtensions(true); $clientsWithWarningInfo = $this->getClientFilterDemand()->setWithExtraWarning(true); $clientsWithDangerInfo = $this->getClientFilterDemand()->setWithExtraDanger(true); + $clientsWithMissingProviderData = $this->getClientFilterDemand()->setWithMissingProviderData(true); $emptyClientDemand = $this->getClientFilterDemand(); $feedItems = null; @@ -97,9 +98,11 @@ public function indexAction(ClientFilterDemand $filter = null) 'clientsWithOutdatedCore' => $this->clientRepository->countByDemand($outdatedCoreDemand), 'clientsWithWarningInfo' => $this->clientRepository->countByDemand($clientsWithWarningInfo), 'clientsWithDangerInfo' => $this->clientRepository->countByDemand($clientsWithDangerInfo), + 'clientsWithMissingProviderData' => $this->clientRepository->countByDemand($clientsWithMissingProviderData), 'numberOfClients' => $this->clientRepository->countAll(), 'slaVersions' => $this->slaRepository->findAll(), 'tagVersions' => $this->tagRepository->findAll(), + 'rules' => $this->checkResultRepository->findAllWithFailCount(), 'feedItems' => $feedItems, 'importTimes' => [ 'client' => $this->registry->get('t3monitoring', 'importClient'), diff --git a/Classes/Domain/Model/CheckResult.php b/Classes/Domain/Model/CheckResult.php new file mode 100644 index 0000000..18d561d --- /dev/null +++ b/Classes/Domain/Model/CheckResult.php @@ -0,0 +1,87 @@ + + */ + protected $failedRules; + + /** + * @var bool + */ + protected $missingProviderData; + + public function __construct() + { + $this->failedRules = GeneralUtility::makeInstance(ObjectStorage::class); + } + + /** + * @return Client + */ + public function getClient() + { + return $this->client; + } + + /** + * @param int $client + */ + public function setClient($client) + { + $this->client = $client; + } + + /** + * @return \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\T3Monitor\T3monitoring\Domain\Model\Rule> failedRules + */ + public function getFailedRules() + { + return $this->failedRules; + } + + /** + * @param \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\T3Monitor\T3monitoring\Domain\Model\Rule> $failedRules + * @return void + */ + public function setFailedRules(\TYPO3\CMS\Extbase\Persistence\ObjectStorage $failedRules) + { + $this->failedRules = $failedRules; + } + + /** + * @param \T3Monitor\T3monitoring\Domain\Model\Rule + */ + public function addFailedRule(Rule $failedRule) + { + $this->failedRules->attach($failedRule); + } + + /** + * @return bool + */ + public function getMissingProviderData() + { + return $this->missingProviderData; + } + + /** + * @param bool $missingProviderData + */ + public function setMissingProviderData(bool $missingProviderData) + { + $this->missingProviderData = $missingProviderData; + } + + +} \ No newline at end of file diff --git a/Classes/Domain/Model/Client.php b/Classes/Domain/Model/Client.php index decf83d..077bf7d 100644 --- a/Classes/Domain/Model/Client.php +++ b/Classes/Domain/Model/Client.php @@ -131,6 +131,11 @@ class Client extends AbstractEntity */ protected $lastSuccessfulImport = null; + /** + * @var \T3Monitor\T3monitoring\Domain\Model\CheckResult + */ + protected $checkResult; + /** * @var \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\T3Monitor\T3monitoring\Domain\Model\Extension> * @lazy @@ -772,4 +777,20 @@ public function getExtraDangerAsArray() } return []; } + + /** + * @return \T3Monitor\T3monitoring\Domain\Model\CheckResult + */ + public function getCheckResult() + { + return $this->checkResult; + } + + /** + * @param \T3Monitor\T3monitoring\Domain\Model\CheckResult $checkResult + */ + public function setCheckResult(CheckResult $checkResult) + { + $this->checkResult = $checkResult; + } } diff --git a/Classes/Domain/Model/Dto/ClientFilterDemand.php b/Classes/Domain/Model/Dto/ClientFilterDemand.php index 2885784..217ab8a 100644 --- a/Classes/Domain/Model/Dto/ClientFilterDemand.php +++ b/Classes/Domain/Model/Dto/ClientFilterDemand.php @@ -55,6 +55,12 @@ class ClientFilterDemand extends AbstractEntity /** @var bool */ protected $withEmailAddress; + /** @var int */ + protected $withFailedRule; + + /** @var bool */ + protected $withMissingProviderData; + /** * @return string */ @@ -288,4 +294,37 @@ public function setWithEmailAddress($withEmailAddress) $this->withEmailAddress = $withEmailAddress; return $this; } + + /** + * @return int + */ + public function isWithFailedRule() + { + return $this->withFailedRule; + } + + /** + * @param int $withFailedRule + */ + public function setWithFailedRule($withFailedRule) + { + $this->withFailedRule = $withFailedRule; + } + + /** + * @return bool + */ + public function isWithMissingProviderData() + { + return $this->withMissingProviderData; + } + + /** + * @param bool $withMissingProviderData + */ + public function setWithMissingProviderData($withMissingProviderData) + { + $this->withMissingProviderData = $withMissingProviderData; + return $this; + } } diff --git a/Classes/Domain/Repository/CheckResultRepository.php b/Classes/Domain/Repository/CheckResultRepository.php new file mode 100644 index 0000000..6de2197 --- /dev/null +++ b/Classes/Domain/Repository/CheckResultRepository.php @@ -0,0 +1,32 @@ +getDatabaseConnection()->createQueryBuilder(); + $result = $queryBuilder->addSelectLiteral(' + uid, + title, + description, + message_category, + ( + SELECT + COUNT(*) + FROM tx_t3monitoring_checkresult_failed_rules_mm + LEFT JOIN tx_t3monitoring_domain_model_checkresult + ON tx_t3monitoring_domain_model_checkresult.uid=tx_t3monitoring_checkresult_failed_rules_mm.uid_local + WHERE uid_foreign=tx_t3monitoring_domain_model_rule.uid + AND tx_t3monitoring_domain_model_checkresult.uid IN (SELECT check_result FROM tx_t3monitoring_domain_model_client) + ) as fail_count') + ->from('tx_t3monitoring_domain_model_rule') + ->orderBy('title') + ->execute() + ->fetchAll(); + + return $result; + } +} diff --git a/Classes/Domain/Repository/ClientRepository.php b/Classes/Domain/Repository/ClientRepository.php index acff50b..76fd751 100644 --- a/Classes/Domain/Repository/ClientRepository.php +++ b/Classes/Domain/Repository/ClientRepository.php @@ -8,6 +8,7 @@ * LICENSE.txt file that was distributed with this source code. */ +use Doctrine\DBAL\DBALException; use T3Monitor\T3monitoring\Domain\Model\Dto\ClientFilterDemand; use TYPO3\CMS\Core\Utility\GeneralUtility; use TYPO3\CMS\Extbase\Persistence\QueryInterface; @@ -76,7 +77,7 @@ public function getAllForReport($emailAddressRequired = false) if ($emailAddressRequired) { $constraints[] = $query->logicalNot( - $query->equals('email', '') + $query->equals('email', '') ); } @@ -169,6 +170,20 @@ protected function getConstraints(ClientFilterDemand $demand, QueryInterface $qu $constraints[] = $query->logicalNot($query->equals('extraDanger', '')); } + // missing provider data + if ($demand->isWithMissingProviderData()) { + $constraints[] = $query->logicalNot($query->equals('checkResult.missingProviderData', '')); + } + + // failed rules + if ($demand->isWithFailedRule() > 0) { + $clientIdsWithFailedRule = $this->getClientIdsByFailedRule($demand->isWithFailedRule()); + if (count($clientIdsWithFailedRule) === 0) { + $clientIdsWithFailedRule[] = 0; + } + $constraints[] = $query->in('uid', $clientIdsWithFailedRule); + } + return $constraints; } @@ -179,4 +194,37 @@ protected function getFilterDemand() { return GeneralUtility::makeInstance(ClientFilterDemand::class); } + + + /** + * @param int $ruleId + * @return array + * @throws DBALException + */ + protected function getClientIdsByFailedRule(int $ruleId) + { + $queryBuilder = $this->getDatabaseConnection()->createQueryBuilder(); + $select = sprintf(' + tx_t3monitoring_domain_model_client.uid + FROM tx_t3monitoring_domain_model_client + LEFT JOIN tx_t3monitoring_domain_model_checkresult + ON tx_t3monitoring_domain_model_checkresult.uid = tx_t3monitoring_domain_model_client.check_result + LEFT JOIN tx_t3monitoring_checkresult_failed_rules_mm + ON tx_t3monitoring_checkresult_failed_rules_mm.uid_local = tx_t3monitoring_domain_model_checkresult.uid + WHERE tx_t3monitoring_checkresult_failed_rules_mm.uid_foreign = %d', + $ruleId + ); + + $rows = $queryBuilder + ->addSelectLiteral($select) + ->execute() + ->fetchAll(); + + $clientIds = []; + foreach ($rows as $row) { + $clientIds[] = $row['uid']; + } + + return $clientIds; + } } diff --git a/Classes/Resolver/BaseResolver.php b/Classes/Resolver/BaseResolver.php index e88f2de..75f1485 100644 --- a/Classes/Resolver/BaseResolver.php +++ b/Classes/Resolver/BaseResolver.php @@ -39,14 +39,18 @@ public function setClientResponse(array $json) { public function setValueForComparison() { } - public function execute(): ?bool + /** + * Return value may be + * + * true = Check failed + * false = Check okay + * null = Missing provider data + * + * @return bool|null + */ + public function execute() { $result = call_user_func_array([$this, $this->operator . 'Operator'], []); - - if (is_bool($result) === false) { - throw new \Exception('Return value from operator function must be a boolean', 1568057811); - } - return $result; } diff --git a/Classes/Resolver/ConfigurationResolver.php b/Classes/Resolver/ConfigurationResolver.php index 22e2f4d..c383d6e 100644 --- a/Classes/Resolver/ConfigurationResolver.php +++ b/Classes/Resolver/ConfigurationResolver.php @@ -12,6 +12,14 @@ public function setValueForComparison() } } + public function execute() + { + if (!isset($this->json['configuration'])) { + return; + } + return parent::execute(); + } + public function getProviderArguments() { return $this->argument; diff --git a/Classes/Resolver/ResolverInterface.php b/Classes/Resolver/ResolverInterface.php index 2a76c99..57ac9e0 100644 --- a/Classes/Resolver/ResolverInterface.php +++ b/Classes/Resolver/ResolverInterface.php @@ -7,7 +7,7 @@ public function setClientResponse(array $json); public function setValueForComparison(); - public function execute(): ?bool; + public function execute(); public function getProviderArguments(); } \ No newline at end of file diff --git a/Classes/Service/CheckExecutor.php b/Classes/Service/CheckExecutor.php deleted file mode 100644 index d282876..0000000 --- a/Classes/Service/CheckExecutor.php +++ /dev/null @@ -1,95 +0,0 @@ -rules = $ruleRepository->findAll(); - } - - public function getProviderArguments() - { - if ($this->providerArguments) { - return $this->providerArguments; - } - - $allProviderArguments = []; - $checks = []; - foreach ($this->rules as $rule) { - foreach ($rule->getFailureCriteria() as $check) { - $checks[$check->getUid()] = $check; - } - foreach ($rule->getExecutionCriteria() as $check) { - $checks[$check->getUid()] = $check; - } - } - foreach ($checks as $check) { - $providerArguments = $this->getResolver($check)->getProviderArguments(); - if ($providerArguments) { - $allProviderArguments[$check->getType()][] = $providerArguments; - } - } - - $this->providerArguments = $allProviderArguments; - return $allProviderArguments; - } - - public function applyRulesAndModifyClientData(&$json) - { - $this->json = $json; - foreach ($this->rules as $rule) { - $executionCriterias = $rule->getExecutionCriteria(); - if (count($executionCriterias) === 0 || $this->checkCriterias($executionCriterias) === true) { - if ($this->checkCriterias($rule->getFailureCriteria()) === true) { - $json['extra'][$rule->getMessageCategory()][$rule->getTitle()] = $rule->getDescription(); - } - } - } - } - - protected function checkCriterias($criterias): bool - { - $result = false; - if ($criterias) { - foreach ($criterias as $criteria) { - if ($result === true) { - break; - } - $result = $this->runCheck($criteria); - } - } - return $result; - } - - protected function runCheck(Check $check): bool - { - $resolver = $this->getResolver($check); - $resolver->setClientResponse($this->json); - $resolver->setValueForComparison(); - return $resolver->execute(); - } - - protected function getResolver(Check $check): ResolverInterface - { - $resolverClass = $GLOBALS['TYPO3_CONF_VARS']['EXT']['t3monitoring']['resolver'][$check->getType()]; - $resolver = GeneralUtility::makeInstance($resolverClass, $check); - return $resolver; - } -} \ No newline at end of file diff --git a/Classes/Service/CheckResultService.php b/Classes/Service/CheckResultService.php new file mode 100644 index 0000000..7327d90 --- /dev/null +++ b/Classes/Service/CheckResultService.php @@ -0,0 +1,129 @@ +rules = $ruleRepository->findAll(); + $this->checkResultRepository = $checkResultRepository; + $this->persistenceManager = $persistenceManager; + } + + /** + * @return array + */ + public function getProviderArguments() + { + if ($this->providerArguments) { + return $this->providerArguments; + } + + $allProviderArguments = []; + $checks = []; + foreach ($this->rules as $rule) { + foreach ($rule->getFailureCriteria() as $check) { + $checks[$check->getUid()] = $check; + } + foreach ($rule->getExecutionCriteria() as $check) { + $checks[$check->getUid()] = $check; + } + } + foreach ($checks as $check) { + $providerArguments = $this->getResolver($check)->getProviderArguments(); + if ($providerArguments) { + $allProviderArguments[$check->getType()][] = $providerArguments; + } + } + + $this->providerArguments = $allProviderArguments; + return $allProviderArguments; + } + + /** + * @param integer $client + * @param array $json + * @return CheckResult + * @throws IllegalObjectTypeException + */ + public function createCheckResult($client, $json) + { + $this->json = $json; + $checkResult = new CheckResult(); + $checkResult->setClient($client); + + foreach ($this->rules as $rule) { + $checkFailureCriterias = true; + foreach ($rule->getExecutionCriteria() as $executionCriteria) { + $checkFailureCriterias = $this->runCheck($executionCriteria); + if (is_null($checkFailureCriterias)) { + $checkResult->setMissingProviderData(true); + break; + } elseif ($checkFailureCriterias === false) { + break; + } + } + if ($checkFailureCriterias === true) { + foreach ($rule->getFailureCriteria() as $failureCritera) { + $result = $this->runCheck($failureCritera); + if ($result === true) { + $checkResult->addFailedRule($rule); + break; + } elseif (is_null($result)) { + $checkResult->setMissingProviderData(true); + break; + } + } + } + } + + $this->checkResultRepository->add($checkResult); + $this->persistenceManager->persistAll(); + + return $checkResult; + } + + protected function runCheck(Check $check) + { + $resolver = $this->getResolver($check); + $resolver->setClientResponse($this->json); + $resolver->setValueForComparison(); + return $resolver->execute(); + } + + protected function getResolver(Check $check): ResolverInterface + { + $resolverClass = $GLOBALS['TYPO3_CONF_VARS']['EXT']['t3monitoring']['resolver'][$check->getType()]; + $resolver = GeneralUtility::makeInstance($resolverClass, $check); + return $resolver; + } +} \ No newline at end of file diff --git a/Classes/Service/Import/ClientImport.php b/Classes/Service/Import/ClientImport.php index 092594b..0de40c8 100644 --- a/Classes/Service/Import/ClientImport.php +++ b/Classes/Service/Import/ClientImport.php @@ -13,7 +13,7 @@ use T3Monitor\T3monitoring\Domain\Model\Extension; use T3Monitor\T3monitoring\Notification\EmailNotification; use T3Monitor\T3monitoring\Service\DataIntegrity; -use T3Monitor\T3monitoring\Service\CheckExecutor; +use T3Monitor\T3monitoring\Service\CheckResultService; use TYPO3\CMS\Core\Database\Connection; use TYPO3\CMS\Core\Database\ConnectionPool; use TYPO3\CMS\Core\Http\RequestFactory; @@ -46,8 +46,8 @@ class ClientImport extends BaseImport /** @var EmailNotification */ protected $emailNotification; - /** @var CheckExecutor */ - protected $checkExecutor; + /** @var CheckResultService */ + protected $checkResultService; /** * Constructor @@ -58,7 +58,7 @@ public function __construct() $this->emailNotification = GeneralUtility::makeInstance(EmailNotification::class); $objectManager = GeneralUtility::makeInstance(ObjectManager::class); - $this->checkExecutor = $objectManager->get(CheckExecutor::class); + $this->checkResultService = $objectManager->get(CheckResultService::class); parent::__construct(); } @@ -136,7 +136,9 @@ protected function importSingleClient(array $row) 'error_count' => 0 ]; - $this->checkExecutor->applyRulesAndModifyClientData($json); + $checkResult = $this->checkResultService->createCheckResult($row['uid'], $json); + $update['check_result'] = $checkResult->getUid(); + $this->addExtraData($json, $update, self::MESSAGE_INFO); $this->addExtraData($json, $update, self::MESSAGE_WARNING); $this->addExtraData($json, $update, self::MESSAGE_DANGER); @@ -213,7 +215,7 @@ protected function requestClientData(array $row) 'headers' => $headers, 'allow_redirects' => true, 'verify' => (bool)!$row['ignore_cert_errors'], - 'form_params' => $this->checkExecutor->getProviderArguments() + 'form_params' => $this->checkResultService->getProviderArguments() ]; if (!empty($row['basic_auth_username']) && !empty($row['basic_auth_password'])) { $additionalOptions['auth'] = [ $row['basic_auth_username'], $row['basic_auth_password'] ]; diff --git a/Configuration/TCA/tx_t3monitoring_domain_model_checkresult.php b/Configuration/TCA/tx_t3monitoring_domain_model_checkresult.php new file mode 100644 index 0000000..9216977 --- /dev/null +++ b/Configuration/TCA/tx_t3monitoring_domain_model_checkresult.php @@ -0,0 +1,36 @@ + [ + 'title' => 'LLL:EXT:t3monitoring/Resources/Private/Language/locallang_db.xlf:tx_t3monitoring_domain_model_checkresult', + 'crdate' => 'crdate', + 'hideTable' => true, + 'iconfile' => 'EXT:t3monitoring/Resources/Public/Icons/tx_t3monitoring_domain_model_rule.gif' + ], + 'columns' => [ + 'client' => [ + 'config' => [ + 'type' => 'select', + 'renderType' => 'selectMultipleSideBySide', + 'foreign_table' => 'tx_t3monitoring_domain_model_client', + 'maxitems' => 1, + ], + + ], + 'failed_rules' => [ + 'config' => [ + 'type' => 'select', + 'renderType' => 'selectMultipleSideBySide', + 'foreign_table' => 'tx_t3monitoring_domain_model_rule', + 'MM' => 'tx_t3monitoring_checkresult_failed_rules_mm', + 'maxitems' => 9999, + ], + ], + 'missing_provider_data' => [ + 'config' => [ + 'readOnly' => true, + 'type' => 'check', + 'default' => 0 + ], + ], + ], +]; diff --git a/Configuration/TCA/tx_t3monitoring_domain_model_client.php b/Configuration/TCA/tx_t3monitoring_domain_model_client.php index c3a660e..0ffac2e 100644 --- a/Configuration/TCA/tx_t3monitoring_domain_model_client.php +++ b/Configuration/TCA/tx_t3monitoring_domain_model_client.php @@ -299,5 +299,27 @@ 'maxitems' => 1, ], ], + 'check_result' => [ + 'label' => 'LLL:EXT:t3monitoring/Resources/Private/Language/locallang.xlf:tx_t3monitoring_domain_model_client.check_result', + 'config' => [ + 'readOnly' => true, + 'type' => 'select', + 'renderType' => 'selectSingle', + 'foreign_table' => 'tx_t3monitoring_domain_model_checkresult', + 'minitems' => 0, + 'maxitems' => 1, + ], + ], + 'earlier_check_result' => [ + 'label' => 'LLL:EXT:t3monitoring/Resources/Private/Language/locallang.xlf:tx_t3monitoring_domain_model_client.earlier_check_result', + 'config' => [ + 'readOnly' => true, + 'type' => 'select', + 'renderType' => 'selectSingle', + 'foreign_table' => 'tx_t3monitoring_domain_model_checkresult', + 'minitems' => 0, + 'maxitems' => 1, + ], + ], ], ]; diff --git a/Resources/Private/Language/locallang.xlf b/Resources/Private/Language/locallang.xlf index 0ff62c8..bbed187 100644 --- a/Resources/Private/Language/locallang.xlf +++ b/Resources/Private/Language/locallang.xlf @@ -387,6 +387,12 @@ Additional errors + + Missing provider data + + + Some rules can not be checked because monitoring client does not provide needed data (Outdated). + Core @@ -491,6 +497,9 @@ The data of the client has been successfully fetched! + + Rules + diff --git a/Resources/Private/Language/locallang_db.xlf b/Resources/Private/Language/locallang_db.xlf index 743358b..9bd0bc6 100644 --- a/Resources/Private/Language/locallang_db.xlf +++ b/Resources/Private/Language/locallang_db.xlf @@ -70,6 +70,9 @@ Sla + + Check result + Extension @@ -226,6 +229,9 @@ Value for comparison + + Missing providers + \ No newline at end of file diff --git a/Resources/Private/Templates/Client/Show.html b/Resources/Private/Templates/Client/Show.html index 5cb2c1a..06996da 100644 --- a/Resources/Private/Templates/Client/Show.html +++ b/Resources/Private/Templates/Client/Show.html @@ -209,6 +209,36 @@

+ + +
+
+ {f:translate(key:'rules')} +
+ + + + + + + + + + + + + + + + + + + + + +
{f:translate(key:'tx_t3monitoring_domain_model_client.title')}{f:translate(key:'tx_t3monitoring_domain_model_extension.description')}
{f:translate(key:'filter.withMissingProviderData')}{f:translate(key:'filter.withMissingProviderData.description')}
{rule.title}{rule.description}
+
+
diff --git a/Resources/Private/Templates/Statistic/Index.html b/Resources/Private/Templates/Statistic/Index.html index 43d0eea..4a0d0fa 100644 --- a/Resources/Private/Templates/Statistic/Index.html +++ b/Resources/Private/Templates/Statistic/Index.html @@ -9,205 +9,260 @@
-
-
-
- {f:translate(key:'clients.total', arguments:'{0:numberOfClients}')} -
- - - - - - - - - - - - - - - - - - - + + + + + + + + + + +
- - {f:translate(key:'clients.notReachable')} - - - {clientsWithErrorMessages} -
- - {f:translate(key:'tx_t3monitoring_domain_model_client.insecure_core')} - - - {clientsWithInsecureCore} -
- - {f:translate(key:'tx_t3monitoring_domain_model_client.outdated_core')} - - - {clientsWithOutdatedCore} -
- - {f:translate(key:'tx_t3monitoring_domain_model_client.insecure_extensions')} - - - {clientsWithInsecureExtensions} -
- - +
+
+
+
+
+ {f:translate(key:'clients.total', arguments:'{0:numberOfClients}')} +
+ + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - -
- {f:translate(key:'tx_t3monitoring_domain_model_client.outdated_extensions')} + additionalParams="{tx_t3monitoring_tools_t3monitoringt3monitor:{filter:{withErrorMessage:'1'}}}"> + {f:translate(key:'clients.notReachable')} - - - {f:translate(key:'tx_t3monitoring_domain_model_client.outdated_extensions')} - + + {clientsWithErrorMessages} +
+ + {f:translate(key:'tx_t3monitoring_domain_model_client.insecure_core')} + + + {clientsWithInsecureCore} +
+ + {f:translate(key:'tx_t3monitoring_domain_model_client.outdated_core')} + + + {clientsWithOutdatedCore} +
+ + {f:translate(key:'tx_t3monitoring_domain_model_client.insecure_extensions')} + + + {clientsWithInsecureExtensions} +
+ + + + {f:translate(key:'tx_t3monitoring_domain_model_client.outdated_extensions')} + + + + {f:translate(key:'tx_t3monitoring_domain_model_client.outdated_extensions')} + + + + {clientsWithOutdatedExtensions} +
+ + {f:translate(key:'filter.withExtraWarning')} + + + {clientsWithWarningInfo} +
- {clientsWithOutdatedExtensions} -
- - {f:translate(key:'filter.withExtraWarning')} - - - {clientsWithWarningInfo} -
- - {f:translate(key:'filter.withExtraDanger')} - - - {clientsWithDangerInfo} -
-
-
-
-
-
- + +
+ + {f:translate(key:'filter.withExtraDanger')} + + + {clientsWithDangerInfo} +
+ + {f:translate(key:'filter.withMissingProviderData')} + + + {clientsWithMissingProviderData} +
+
- - - - - - - - - - - - - - - -
{f:translate(key:'tx_t3monitoring_domain_model_core.version')}{f:translate(key:'count')}
- - {line.version} - - {line.count}
- -
- -
+ // Instantiate and draw our chart, passing in some options. + var chart = new google.visualization.PieChart(document.getElementById('chart_core_versions')); + chart.draw(data, options); + } + + +
+ + +
+
+
+ {f:translate(key:'rules')} +
+ + + + + + + + + + + + + + + +
{f:translate(key:'tx_t3monitoring_domain_model_client.title')}Fail count
+ + {rule.title} + + + + + + + + + + + {rule.fail_count} +
+
- +
- - - - - - - -
- {f:translate(key:'bulletins.errorFetch')} -
-
-
-
- - -

{f:translate(key:'bulletins.disabled')}

-
-
-
+ + + + + + + +
+ {f:translate(key:'bulletins.errorFetch')} +
+
+
+
+ + +

{f:translate(key:'bulletins.disabled')}

+
+
+
@@ -333,7 +388,7 @@ - {client.title} + {client.title} diff --git a/ext_tables.sql b/ext_tables.sql index f966251..c8c528b 100644 --- a/ext_tables.sql +++ b/ext_tables.sql @@ -33,6 +33,7 @@ CREATE TABLE tx_t3monitoring_domain_model_client ( core int(11) unsigned DEFAULT '0', sla int(11) unsigned DEFAULT '0', tag tinytext, + check_result int(11) unsigned DEFAULT '0', tstamp int(11) unsigned DEFAULT '0' NOT NULL, crdate int(11) unsigned DEFAULT '0' NOT NULL, @@ -203,7 +204,7 @@ CREATE TABLE tx_t3monitoring_domain_model_check ( uid int(11) NOT NULL auto_increment, pid int(11) DEFAULT '0' NOT NULL, - title varchar(255) DEFAULT '' NOT NULL, + title varchar(255) DEFAULT '' NOT NULL, type varchar(255) DEFAULT '' NOT NULL, argument varchar(255) DEFAULT '' NOT NULL, operator varchar(255) DEFAULT '' NOT NULL, @@ -236,6 +237,30 @@ CREATE TABLE tx_t3monitoring_rule_failure_criteria_check_mm ( sorting int(11) unsigned DEFAULT '0' NOT NULL, sorting_foreign int(11) unsigned DEFAULT '0' NOT NULL, + PRIMARY KEY (uid_local,uid_foreign), + KEY uid_local (uid_local), + KEY uid_foreign (uid_foreign) +); + +CREATE TABLE tx_t3monitoring_domain_model_checkresult ( + + uid int(11) NOT NULL auto_increment, + pid int(11) DEFAULT '0' NOT NULL, + client int(11) DEFAULT '0' NOT NULL, + failed_rules int(11) DEFAULT '0' NOT NULL, + missing_provider_data tinyint(1) unsigned DEFAULT '0' NOT NULL, + crdate int(11) unsigned DEFAULT '0' NOT NULL, + + PRIMARY KEY (uid), + KEY parent (pid) +); + +CREATE TABLE tx_t3monitoring_checkresult_failed_rules_mm ( + uid_local int(11) unsigned DEFAULT '0' NOT NULL, + uid_foreign int(11) unsigned DEFAULT '0' NOT NULL, + sorting int(11) unsigned DEFAULT '0' NOT NULL, + sorting_foreign int(11) unsigned DEFAULT '0' NOT NULL, + PRIMARY KEY (uid_local,uid_foreign), KEY uid_local (uid_local), KEY uid_foreign (uid_foreign) From b620944d2bae4898f0d6119bcaf7b586b5392f33 Mon Sep 17 00:00:00 2001 From: Christoph Lehmann Date: Sun, 22 Sep 2019 19:08:51 +0200 Subject: [PATCH 3/7] Task: Adapt rules panel --- Resources/Private/Templates/Statistic/Index.html | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/Resources/Private/Templates/Statistic/Index.html b/Resources/Private/Templates/Statistic/Index.html index 4a0d0fa..83c2a2d 100644 --- a/Resources/Private/Templates/Statistic/Index.html +++ b/Resources/Private/Templates/Statistic/Index.html @@ -191,20 +191,14 @@ {f:translate(key:'rules')}
- - - - - - -
{f:translate(key:'tx_t3monitoring_domain_model_client.title')}Fail count
+ {rule.title} - + From 0b9ec2baa9141f2bdec7efc9ec7af13f5a3f1437 Mon Sep 17 00:00:00 2001 From: Christoph Lehmann Date: Sun, 22 Sep 2019 21:57:20 +0200 Subject: [PATCH 4/7] Task: Add header resolver --- Classes/Domain/Model/Client.php | 21 +++++ Classes/Domain/Model/Dto/ResolverData.php | 82 +++++++++++++++++++ Classes/Resolver/BaseResolver.php | 14 +++- Classes/Resolver/ConfigurationResolver.php | 6 +- Classes/Resolver/CoreVersionResolver.php | 2 +- Classes/Resolver/ExtensionStateResolver.php | 16 ++-- Classes/Resolver/ExtensionVersionResolver.php | 5 +- Classes/Resolver/HeaderResolver.php | 24 ++++++ Classes/Resolver/ResolverInterface.php | 4 +- Classes/Service/CheckResultService.php | 26 ++++-- Classes/Service/Import/ClientImport.php | 12 ++- .../tx_t3monitoring_domain_model_check.php | 13 +++ ext_localconf.php | 1 + 13 files changed, 195 insertions(+), 31 deletions(-) create mode 100644 Classes/Domain/Model/Dto/ResolverData.php create mode 100644 Classes/Resolver/HeaderResolver.php diff --git a/Classes/Domain/Model/Client.php b/Classes/Domain/Model/Client.php index 077bf7d..637bcce 100644 --- a/Classes/Domain/Model/Client.php +++ b/Classes/Domain/Model/Client.php @@ -131,6 +131,11 @@ class Client extends AbstractEntity */ protected $lastSuccessfulImport = null; + /** + * @var \T3Monitor\T3monitoring\Domain\Model\CheckResult + */ + protected $earlierCheckResult; + /** * @var \T3Monitor\T3monitoring\Domain\Model\CheckResult */ @@ -778,6 +783,22 @@ public function getExtraDangerAsArray() return []; } + /** + * @return \T3Monitor\T3monitoring\Domain\Model\CheckResult + */ + public function getEarlierCheckResult() + { + return $this->earlierCheckResult; + } + + /** + * @param \T3Monitor\T3monitoring\Domain\Model\CheckResult $earlierCheckResult + */ + public function setEarlierCheckResult(CheckResult $earlierCheckResult) + { + $this->earlierCheckResult = $earlierCheckResult; + } + /** * @return \T3Monitor\T3monitoring\Domain\Model\CheckResult */ diff --git a/Classes/Domain/Model/Dto/ResolverData.php b/Classes/Domain/Model/Dto/ResolverData.php new file mode 100644 index 0000000..54ed3e0 --- /dev/null +++ b/Classes/Domain/Model/Dto/ResolverData.php @@ -0,0 +1,82 @@ +client = $client; + $this->response = $response; + $this->responseHeaders = $responseHeaders; + } + + /** + * @return array + */ + public function getClient() + { + return $this->client; + } + + /** + * @param array $client + */ + public function setClient(array $client) + { + $this->client = $client; + } + + /** + * @return array + */ + public function getResponse() + { + return $this->response; + } + + /** + * @param array $response + */ + public function setResponse(array $response) + { + $this->response = $response; + } + + /** + * @return array + */ + public function getResponseHeaders() + { + return $this->responseHeaders; + } + + /** + * @param array $responseHeaders + */ + public function setResponseHeaders(array $responseHeaders) + { + $this->responseHeaders = $responseHeaders; + } +} \ No newline at end of file diff --git a/Classes/Resolver/BaseResolver.php b/Classes/Resolver/BaseResolver.php index 75f1485..26c64de 100644 --- a/Classes/Resolver/BaseResolver.php +++ b/Classes/Resolver/BaseResolver.php @@ -2,9 +2,15 @@ namespace T3Monitor\T3monitoring\Resolver; use T3Monitor\T3monitoring\Domain\Model\Check; +use T3Monitor\T3monitoring\Domain\Model\Dto\ResolverData; class BaseResolver implements ResolverInterface { + /** + * @var ResolverData + */ + protected $resolverData; + /** * @var string */ @@ -32,11 +38,13 @@ public function __construct(Check $check) $this->value = $check->getValue(); } - public function setClientResponse(array $json) { - $this->json = $json; + public function setup(ResolverData $resolverData) + { + $this->resolverData = $resolverData; } - public function setValueForComparison() { + public function setValueForComparison() + { } /** diff --git a/Classes/Resolver/ConfigurationResolver.php b/Classes/Resolver/ConfigurationResolver.php index c383d6e..5f2b917 100644 --- a/Classes/Resolver/ConfigurationResolver.php +++ b/Classes/Resolver/ConfigurationResolver.php @@ -7,14 +7,14 @@ class ConfigurationResolver extends BaseResolver public function setValueForComparison() { - if (isset($this->json['configuration'][$this->argument])) { - $this->valueForComparison = $this->json['configuration'][$this->argument]; + if (isset($this->resolverData->getResponse()['configuration'][$this->argument])) { + $this->valueForComparison = $this->resolverData->getResponse()['configuration'][$this->argument]; } } public function execute() { - if (!isset($this->json['configuration'])) { + if (!isset($this->resolverData->getResponse()['configuration'])) { return; } return parent::execute(); diff --git a/Classes/Resolver/CoreVersionResolver.php b/Classes/Resolver/CoreVersionResolver.php index 647b0e0..66859ed 100644 --- a/Classes/Resolver/CoreVersionResolver.php +++ b/Classes/Resolver/CoreVersionResolver.php @@ -7,6 +7,6 @@ class CoreVersionResolver extends ComposerVersionResolver public function setValueForComparison() { - $this->valueForComparison = $this->json['core']['typo3Version']; + $this->valueForComparison = $this->resolverData->getResponse()['core']['typo3Version']; } } \ No newline at end of file diff --git a/Classes/Resolver/ExtensionStateResolver.php b/Classes/Resolver/ExtensionStateResolver.php index 281a2ec..e3ff5f6 100644 --- a/Classes/Resolver/ExtensionStateResolver.php +++ b/Classes/Resolver/ExtensionStateResolver.php @@ -5,23 +5,23 @@ class ExtensionStateResolver extends BaseResolver { const TITLE = 'Extension state'; - public function isPresentOperator() : bool + public function isPresentOperator(): bool { - return in_array($this->argument, $this->json['extensions']); + return in_array($this->argument, $this->resolverData->getResponse()['extensions']); } - public function isNotPresentOperator() : bool + public function isNotPresentOperator(): bool { - return !in_array($this->argument, $this->json['extensions']); + return !in_array($this->argument, $this->resolverData->getResponse()['extensions']); } - public function isLoadedOperator() : bool + public function isLoadedOperator(): bool { - return (bool)$this->json['extensions'][$this->argument]['isLoaded'] === true; + return (bool)$this->resolverData->getResponse()['extensions'][$this->argument]['isLoaded'] === true; } - public function isNotLoadedOperator() : bool + public function isNotLoadedOperator(): bool { - return (bool)$this->json['extensions'][$this->argument]['isLoaded'] === false; + return (bool)$this->resolverData->getResponse()['extensions'][$this->argument]['isLoaded'] === false; } } \ No newline at end of file diff --git a/Classes/Resolver/ExtensionVersionResolver.php b/Classes/Resolver/ExtensionVersionResolver.php index 237c241..109fb7a 100644 --- a/Classes/Resolver/ExtensionVersionResolver.php +++ b/Classes/Resolver/ExtensionVersionResolver.php @@ -5,7 +5,8 @@ class ExtensionVersionResolver extends ComposerVersionResolver { const TITLE = 'Extension version'; - public function setup() { - $this->valueForComparison = $this->json['extensions'][$this->argument]['version']; + public function setValueForComparison() + { + $this->valueForComparison = $this->resolverData->getResponse()['extensions'][$this->argument]['version']; } } \ No newline at end of file diff --git a/Classes/Resolver/HeaderResolver.php b/Classes/Resolver/HeaderResolver.php new file mode 100644 index 0000000..60e3479 --- /dev/null +++ b/Classes/Resolver/HeaderResolver.php @@ -0,0 +1,24 @@ +valueForComparison = $this->resolverData->getResponseHeaders()[$this->argument]; + } + + public function isSetOperator(): bool + { + return isset($this->valueForComparison); + } + + public function isNotSetOperator(): bool + { + return !isset($this->valueForComparison); + } +} \ No newline at end of file diff --git a/Classes/Resolver/ResolverInterface.php b/Classes/Resolver/ResolverInterface.php index 57ac9e0..83ed007 100644 --- a/Classes/Resolver/ResolverInterface.php +++ b/Classes/Resolver/ResolverInterface.php @@ -1,9 +1,11 @@ json = $json; + $this->resolverData = $resolverData; $checkResult = new CheckResult(); - $checkResult->setClient($client); + $checkResult->setClient($resolverData->getClient()['uid']); foreach ($this->rules as $rule) { $checkFailureCriterias = true; @@ -112,15 +112,23 @@ public function createCheckResult($client, $json) return $checkResult; } + /** + * @param Check $check + * @return null|bool + */ protected function runCheck(Check $check) { $resolver = $this->getResolver($check); - $resolver->setClientResponse($this->json); + $resolver->setup($this->resolverData); $resolver->setValueForComparison(); return $resolver->execute(); } - protected function getResolver(Check $check): ResolverInterface + /** + * @param Check $check + * @return ResolverInterface + */ + protected function getResolver(Check $check) { $resolverClass = $GLOBALS['TYPO3_CONF_VARS']['EXT']['t3monitoring']['resolver'][$check->getType()]; $resolver = GeneralUtility::makeInstance($resolverClass, $check); diff --git a/Classes/Service/Import/ClientImport.php b/Classes/Service/Import/ClientImport.php index 0de40c8..cb0acb5 100644 --- a/Classes/Service/Import/ClientImport.php +++ b/Classes/Service/Import/ClientImport.php @@ -10,6 +10,7 @@ */ use Exception; +use T3Monitor\T3monitoring\Domain\Model\Dto\ResolverData; use T3Monitor\T3monitoring\Domain\Model\Extension; use T3Monitor\T3monitoring\Notification\EmailNotification; use T3Monitor\T3monitoring\Service\DataIntegrity; @@ -114,7 +115,7 @@ public function getResponseCount() protected function importSingleClient(array $row) { try { - $response = $this->requestClientData($row); + list($response, $responseHeaders) = $this->requestClientData($row); if (empty($response)) { throw new \RuntimeException('Empty response from client ' . $row['title']); } @@ -136,7 +137,9 @@ protected function importSingleClient(array $row) 'error_count' => 0 ]; - $checkResult = $this->checkResultService->createCheckResult($row['uid'], $json); + $checkResultCreationDemand = new ResolverData($row, $json, $responseHeaders); + $checkResult = $this->checkResultService->createCheckResult($checkResultCreationDemand); + $update['earlier_check_result'] = $row['check_result']; $update['check_result'] = $checkResult->getUid(); $this->addExtraData($json, $update, self::MESSAGE_INFO); @@ -195,7 +198,7 @@ protected function handleError(array $client, Exception $error) /** * @param array $row * - * @return mixed + * @return array * @throws \InvalidArgumentException * @throws \RuntimeException */ @@ -227,11 +230,12 @@ protected function requestClientData(array $row) if (!empty($response->getReasonPhrase()) && $response->getReasonPhrase() !== 'OK') { throw new \RuntimeException($response->getReasonPhrase()); } + $responseHeaders = $response->getHeaders(); if (in_array($response->getStatusCode(), [ 200, 301, 302 ], true)) { $response = $response->getBody()->getContents(); } - return $response; + return [$response, $responseHeaders]; } /** diff --git a/Configuration/TCA/tx_t3monitoring_domain_model_check.php b/Configuration/TCA/tx_t3monitoring_domain_model_check.php index 286e812..4931ed2 100644 --- a/Configuration/TCA/tx_t3monitoring_domain_model_check.php +++ b/Configuration/TCA/tx_t3monitoring_domain_model_check.php @@ -37,6 +37,19 @@ ] ] ], + 'header' => [ + 'showitem' => 'hidden, title, type, argument, operator', + 'columnsOverrides' => [ + 'operator' => [ + 'config' => [ + 'items' => [ + ['is set', 'isSet'], + ['is not set', 'isNotSet'], + ] + ] + ] + ] + ], 'coreVersion' => [ 'showitem' => 'hidden, title, type, operator, value', 'columnsOverrides' => [ diff --git a/ext_localconf.php b/ext_localconf.php index b509484..95451ff 100644 --- a/ext_localconf.php +++ b/ext_localconf.php @@ -13,6 +13,7 @@ function ($extKey) { = \T3Monitor\T3monitoring\Hooks\DataHandlerHook::class; $GLOBALS['TYPO3_CONF_VARS']['EXT'][$extKey]['resolver']['configurationValue'] = \T3Monitor\T3monitoring\Resolver\ConfigurationResolver::class; + $GLOBALS['TYPO3_CONF_VARS']['EXT'][$extKey]['resolver']['header'] = \T3Monitor\T3monitoring\Resolver\HeaderResolver::class; $GLOBALS['TYPO3_CONF_VARS']['EXT'][$extKey]['resolver']['extensionState'] = \T3Monitor\T3monitoring\Resolver\ExtensionStateResolver::class; $GLOBALS['TYPO3_CONF_VARS']['EXT'][$extKey]['resolver']['extensionVersion'] = \T3Monitor\T3monitoring\Resolver\ExtensionVersionResolver::class; $GLOBALS['TYPO3_CONF_VARS']['EXT'][$extKey]['resolver']['coreVersion'] = \T3Monitor\T3monitoring\Resolver\CoreVersionResolver::class; From c3f68a93e585955b4f2051f4126f1141adf56ddb Mon Sep 17 00:00:00 2001 From: Christoph Lehmann Date: Mon, 23 Sep 2019 00:08:56 +0200 Subject: [PATCH 5/7] Task: Add backend user resolver --- Classes/Domain/Model/Dto/ResolverData.php | 24 +++++++++++ Classes/Resolver/BackendUserResolver.php | 43 +++++++++++++++++++ Classes/Service/CheckResultService.php | 7 ++- Classes/Service/Import/ClientImport.php | 6 ++- .../tx_t3monitoring_domain_model_check.php | 18 ++++++++ ext_localconf.php | 1 + ext_tables.sql | 2 +- 7 files changed, 97 insertions(+), 4 deletions(-) create mode 100644 Classes/Resolver/BackendUserResolver.php diff --git a/Classes/Domain/Model/Dto/ResolverData.php b/Classes/Domain/Model/Dto/ResolverData.php index 54ed3e0..961af74 100644 --- a/Classes/Domain/Model/Dto/ResolverData.php +++ b/Classes/Domain/Model/Dto/ResolverData.php @@ -8,6 +8,8 @@ * LICENSE.txt file that was distributed with this source code. */ +use T3Monitor\T3monitoring\Domain\Model\Rule; + class ResolverData { /** @@ -25,6 +27,11 @@ class ResolverData */ protected $responseHeaders; + /** + * @var Rule + */ + protected $rule; + public function __construct(array $client, array $response, array $responseHeaders) { $this->client = $client; @@ -79,4 +86,21 @@ public function setResponseHeaders(array $responseHeaders) { $this->responseHeaders = $responseHeaders; } + + /** + * @return Rule + */ + public function getRule() + { + return $this->rule; + } + + /** + * @param Rule $rule + */ + public function setRule(Rule $rule) + { + $this->rule = $rule; + } + } \ No newline at end of file diff --git a/Classes/Resolver/BackendUserResolver.php b/Classes/Resolver/BackendUserResolver.php new file mode 100644 index 0000000..1098a72 --- /dev/null +++ b/Classes/Resolver/BackendUserResolver.php @@ -0,0 +1,43 @@ +valueForComparison = $this->resolverData->getResponse()['backendUser']; + } + + public function getProviderArguments() + { + return GeneralUtility::trimExplode(PHP_EOL, $this->argument, true); + } + + protected function isActiveOperator() + { + if (!isset($this->resolverData->getResponse()['backendUser'])) { + return; + } + + $unwantedActiveUsers = array_intersect($this->getProviderArguments(), + $this->resolverData->getResponse()['backendUser']); + + if (count($unwantedActiveUsers) > 0) { + $this->addRuleData($unwantedActiveUsers); + } + return $unwantedActiveUsers !== 0; + } + + protected function addRuleData($backendUsers) + { + $update = $this->resolverData->getResponse(); + $messageCategory = $this->resolverData->getRule()->getMessageCategory(); + $update['extra'][$messageCategory][$this->resolverData->getRule()->getTitle()] = implode(',', + $backendUsers); + $this->resolverData->setResponse($update); + } +} \ No newline at end of file diff --git a/Classes/Service/CheckResultService.php b/Classes/Service/CheckResultService.php index 464815e..eaa3d4e 100644 --- a/Classes/Service/CheckResultService.php +++ b/Classes/Service/CheckResultService.php @@ -62,7 +62,11 @@ public function getProviderArguments() foreach ($checks as $check) { $providerArguments = $this->getResolver($check)->getProviderArguments(); if ($providerArguments) { - $allProviderArguments[$check->getType()][] = $providerArguments; + if (is_array($providerArguments)) { + $allProviderArguments[$check->getType()] = $providerArguments; + } else { + $allProviderArguments[$check->getType()][] = $providerArguments; + } } } @@ -82,6 +86,7 @@ public function createCheckResult(ResolverData $resolverData) $checkResult->setClient($resolverData->getClient()['uid']); foreach ($this->rules as $rule) { + $this->resolverData->setRule($rule); $checkFailureCriterias = true; foreach ($rule->getExecutionCriteria() as $executionCriteria) { $checkFailureCriterias = $this->runCheck($executionCriteria); diff --git a/Classes/Service/Import/ClientImport.php b/Classes/Service/Import/ClientImport.php index cb0acb5..77d55b7 100644 --- a/Classes/Service/Import/ClientImport.php +++ b/Classes/Service/Import/ClientImport.php @@ -137,8 +137,10 @@ protected function importSingleClient(array $row) 'error_count' => 0 ]; - $checkResultCreationDemand = new ResolverData($row, $json, $responseHeaders); - $checkResult = $this->checkResultService->createCheckResult($checkResultCreationDemand); + $resolverData = new ResolverData($row, $json, $responseHeaders); + $checkResult = $this->checkResultService->createCheckResult($resolverData); + $json = $resolverData->getResponse(); + $update['earlier_check_result'] = $row['check_result']; $update['check_result'] = $checkResult->getUid(); diff --git a/Configuration/TCA/tx_t3monitoring_domain_model_check.php b/Configuration/TCA/tx_t3monitoring_domain_model_check.php index 4931ed2..e4e819c 100644 --- a/Configuration/TCA/tx_t3monitoring_domain_model_check.php +++ b/Configuration/TCA/tx_t3monitoring_domain_model_check.php @@ -100,6 +100,24 @@ ] ] ], + 'backendUser' => [ + 'showitem' => 'hidden, title, type, argument, operator', + 'columnsOverrides' => [ + 'argument' => [ + 'label' => 'List of backend users separated by newline', + 'config' => [ + 'type' => 'text' + ] + ], + 'operator' => [ + 'config' => [ + 'items' => [ + ['is active', 'isActive'], + ] + ] + ], + ] + ], ], 'columns' => [ 'hidden' => [ diff --git a/ext_localconf.php b/ext_localconf.php index 95451ff..8273658 100644 --- a/ext_localconf.php +++ b/ext_localconf.php @@ -12,6 +12,7 @@ function ($extKey) { $GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['t3lib/class.t3lib_tcemain.php']['processDatamapClass'][$extKey] = \T3Monitor\T3monitoring\Hooks\DataHandlerHook::class; + $GLOBALS['TYPO3_CONF_VARS']['EXT'][$extKey]['resolver']['backendUser'] = \T3Monitor\T3monitoring\Resolver\BackendUserResolver::class; $GLOBALS['TYPO3_CONF_VARS']['EXT'][$extKey]['resolver']['configurationValue'] = \T3Monitor\T3monitoring\Resolver\ConfigurationResolver::class; $GLOBALS['TYPO3_CONF_VARS']['EXT'][$extKey]['resolver']['header'] = \T3Monitor\T3monitoring\Resolver\HeaderResolver::class; $GLOBALS['TYPO3_CONF_VARS']['EXT'][$extKey]['resolver']['extensionState'] = \T3Monitor\T3monitoring\Resolver\ExtensionStateResolver::class; diff --git a/ext_tables.sql b/ext_tables.sql index c8c528b..b5ff28e 100644 --- a/ext_tables.sql +++ b/ext_tables.sql @@ -206,7 +206,7 @@ CREATE TABLE tx_t3monitoring_domain_model_check ( title varchar(255) DEFAULT '' NOT NULL, type varchar(255) DEFAULT '' NOT NULL, - argument varchar(255) DEFAULT '' NOT NULL, + argument text DEFAULT '' NOT NULL, operator varchar(255) DEFAULT '' NOT NULL, value varchar(255) DEFAULT '' NOT NULL, From f57984e8b36097b9a98b8b0bff392cbcea48c92a Mon Sep 17 00:00:00 2001 From: Christoph Lehmann Date: Mon, 23 Sep 2019 20:59:19 +0200 Subject: [PATCH 6/7] Task: Apply StyleCi changes --- Classes/Domain/Model/CheckResult.php | 4 +--- Classes/Domain/Model/Dto/ResolverData.php | 3 +-- Classes/Domain/Model/Rule.php | 2 +- Classes/Domain/Repository/CheckResultRepository.php | 2 -- Classes/Domain/Repository/ClientRepository.php | 1 - Classes/Resolver/BackendUserResolver.php | 2 +- Classes/Resolver/BaseResolver.php | 2 +- Classes/Resolver/ComposerVersionResolver.php | 2 +- Classes/Resolver/ConfigurationResolver.php | 2 +- Classes/Resolver/CoreVersionResolver.php | 2 +- Classes/Resolver/ExtensionStateResolver.php | 2 +- Classes/Resolver/ExtensionVersionResolver.php | 2 +- Classes/Resolver/HeaderResolver.php | 4 +--- Classes/Resolver/ResolverInterface.php | 2 +- Classes/Service/CheckResultService.php | 4 ++-- Classes/Service/Import/ClientImport.php | 2 +- Classes/Utility/TcaUtility.php | 2 +- 17 files changed, 16 insertions(+), 24 deletions(-) diff --git a/Classes/Domain/Model/CheckResult.php b/Classes/Domain/Model/CheckResult.php index 18d561d..37c7993 100644 --- a/Classes/Domain/Model/CheckResult.php +++ b/Classes/Domain/Model/CheckResult.php @@ -82,6 +82,4 @@ public function setMissingProviderData(bool $missingProviderData) { $this->missingProviderData = $missingProviderData; } - - -} \ No newline at end of file +} diff --git a/Classes/Domain/Model/Dto/ResolverData.php b/Classes/Domain/Model/Dto/ResolverData.php index 961af74..53c5f0f 100644 --- a/Classes/Domain/Model/Dto/ResolverData.php +++ b/Classes/Domain/Model/Dto/ResolverData.php @@ -102,5 +102,4 @@ public function setRule(Rule $rule) { $this->rule = $rule; } - -} \ No newline at end of file +} diff --git a/Classes/Domain/Model/Rule.php b/Classes/Domain/Model/Rule.php index be34781..e31ce18 100644 --- a/Classes/Domain/Model/Rule.php +++ b/Classes/Domain/Model/Rule.php @@ -109,4 +109,4 @@ public function setMessageCategory(string $messageCategory) { $this->messageCategory = $messageCategory; } -} \ No newline at end of file +} diff --git a/Classes/Domain/Repository/CheckResultRepository.php b/Classes/Domain/Repository/CheckResultRepository.php index 6de2197..33665a5 100644 --- a/Classes/Domain/Repository/CheckResultRepository.php +++ b/Classes/Domain/Repository/CheckResultRepository.php @@ -1,8 +1,6 @@ resolverData->setResponse($update); } -} \ No newline at end of file +} diff --git a/Classes/Resolver/BaseResolver.php b/Classes/Resolver/BaseResolver.php index 26c64de..eadb148 100644 --- a/Classes/Resolver/BaseResolver.php +++ b/Classes/Resolver/BaseResolver.php @@ -65,4 +65,4 @@ public function execute() public function getProviderArguments() { } -} \ No newline at end of file +} diff --git a/Classes/Resolver/ComposerVersionResolver.php b/Classes/Resolver/ComposerVersionResolver.php index aae6f0a..a7017e3 100644 --- a/Classes/Resolver/ComposerVersionResolver.php +++ b/Classes/Resolver/ComposerVersionResolver.php @@ -14,4 +14,4 @@ public function matchesNotVersionOperator() { return !Semver::satisfies($this->valueForComparison, $this->value); } -} \ No newline at end of file +} diff --git a/Classes/Resolver/ConfigurationResolver.php b/Classes/Resolver/ConfigurationResolver.php index 5f2b917..1291e73 100644 --- a/Classes/Resolver/ConfigurationResolver.php +++ b/Classes/Resolver/ConfigurationResolver.php @@ -44,4 +44,4 @@ public function isNotOperator(): bool { return $this->valueForComparison !== $this->value; } -} \ No newline at end of file +} diff --git a/Classes/Resolver/CoreVersionResolver.php b/Classes/Resolver/CoreVersionResolver.php index 66859ed..a28bd16 100644 --- a/Classes/Resolver/CoreVersionResolver.php +++ b/Classes/Resolver/CoreVersionResolver.php @@ -9,4 +9,4 @@ public function setValueForComparison() { $this->valueForComparison = $this->resolverData->getResponse()['core']['typo3Version']; } -} \ No newline at end of file +} diff --git a/Classes/Resolver/ExtensionStateResolver.php b/Classes/Resolver/ExtensionStateResolver.php index e3ff5f6..735831a 100644 --- a/Classes/Resolver/ExtensionStateResolver.php +++ b/Classes/Resolver/ExtensionStateResolver.php @@ -24,4 +24,4 @@ public function isNotLoadedOperator(): bool { return (bool)$this->resolverData->getResponse()['extensions'][$this->argument]['isLoaded'] === false; } -} \ No newline at end of file +} diff --git a/Classes/Resolver/ExtensionVersionResolver.php b/Classes/Resolver/ExtensionVersionResolver.php index 109fb7a..230402c 100644 --- a/Classes/Resolver/ExtensionVersionResolver.php +++ b/Classes/Resolver/ExtensionVersionResolver.php @@ -9,4 +9,4 @@ public function setValueForComparison() { $this->valueForComparison = $this->resolverData->getResponse()['extensions'][$this->argument]['version']; } -} \ No newline at end of file +} diff --git a/Classes/Resolver/HeaderResolver.php b/Classes/Resolver/HeaderResolver.php index 60e3479..7ffb7c3 100644 --- a/Classes/Resolver/HeaderResolver.php +++ b/Classes/Resolver/HeaderResolver.php @@ -1,8 +1,6 @@ valueForComparison); } -} \ No newline at end of file +} diff --git a/Classes/Resolver/ResolverInterface.php b/Classes/Resolver/ResolverInterface.php index 83ed007..3d2de50 100644 --- a/Classes/Resolver/ResolverInterface.php +++ b/Classes/Resolver/ResolverInterface.php @@ -12,4 +12,4 @@ public function setValueForComparison(); public function execute(); public function getProviderArguments(); -} \ No newline at end of file +} diff --git a/Classes/Service/CheckResultService.php b/Classes/Service/CheckResultService.php index eaa3d4e..bb72979 100644 --- a/Classes/Service/CheckResultService.php +++ b/Classes/Service/CheckResultService.php @@ -65,7 +65,7 @@ public function getProviderArguments() if (is_array($providerArguments)) { $allProviderArguments[$check->getType()] = $providerArguments; } else { - $allProviderArguments[$check->getType()][] = $providerArguments; + $allProviderArguments[$check->getType()][] = $providerArguments; } } } @@ -139,4 +139,4 @@ protected function getResolver(Check $check) $resolver = GeneralUtility::makeInstance($resolverClass, $check); return $resolver; } -} \ No newline at end of file +} diff --git a/Classes/Service/Import/ClientImport.php b/Classes/Service/Import/ClientImport.php index 77d55b7..5203c49 100644 --- a/Classes/Service/Import/ClientImport.php +++ b/Classes/Service/Import/ClientImport.php @@ -13,8 +13,8 @@ use T3Monitor\T3monitoring\Domain\Model\Dto\ResolverData; use T3Monitor\T3monitoring\Domain\Model\Extension; use T3Monitor\T3monitoring\Notification\EmailNotification; -use T3Monitor\T3monitoring\Service\DataIntegrity; use T3Monitor\T3monitoring\Service\CheckResultService; +use T3Monitor\T3monitoring\Service\DataIntegrity; use TYPO3\CMS\Core\Database\Connection; use TYPO3\CMS\Core\Database\ConnectionPool; use TYPO3\CMS\Core\Http\RequestFactory; diff --git a/Classes/Utility/TcaUtility.php b/Classes/Utility/TcaUtility.php index 0aae846..bde0faa 100644 --- a/Classes/Utility/TcaUtility.php +++ b/Classes/Utility/TcaUtility.php @@ -13,4 +13,4 @@ public function getCheckTypes($config) } return $config; } -} \ No newline at end of file +} From f4e2ba363576f42dd078576f4218ba43e9040017 Mon Sep 17 00:00:00 2001 From: Christoph Lehmann Date: Mon, 23 Sep 2019 21:54:47 +0200 Subject: [PATCH 7/7] Task: Remove superfluous code --- Classes/Domain/Model/Client.php | 21 ------------------- Classes/Service/Import/ClientImport.php | 2 -- .../tx_t3monitoring_domain_model_client.php | 11 ---------- 3 files changed, 34 deletions(-) diff --git a/Classes/Domain/Model/Client.php b/Classes/Domain/Model/Client.php index 637bcce..077bf7d 100644 --- a/Classes/Domain/Model/Client.php +++ b/Classes/Domain/Model/Client.php @@ -131,11 +131,6 @@ class Client extends AbstractEntity */ protected $lastSuccessfulImport = null; - /** - * @var \T3Monitor\T3monitoring\Domain\Model\CheckResult - */ - protected $earlierCheckResult; - /** * @var \T3Monitor\T3monitoring\Domain\Model\CheckResult */ @@ -783,22 +778,6 @@ public function getExtraDangerAsArray() return []; } - /** - * @return \T3Monitor\T3monitoring\Domain\Model\CheckResult - */ - public function getEarlierCheckResult() - { - return $this->earlierCheckResult; - } - - /** - * @param \T3Monitor\T3monitoring\Domain\Model\CheckResult $earlierCheckResult - */ - public function setEarlierCheckResult(CheckResult $earlierCheckResult) - { - $this->earlierCheckResult = $earlierCheckResult; - } - /** * @return \T3Monitor\T3monitoring\Domain\Model\CheckResult */ diff --git a/Classes/Service/Import/ClientImport.php b/Classes/Service/Import/ClientImport.php index 5203c49..c4dc7f3 100644 --- a/Classes/Service/Import/ClientImport.php +++ b/Classes/Service/Import/ClientImport.php @@ -140,8 +140,6 @@ protected function importSingleClient(array $row) $resolverData = new ResolverData($row, $json, $responseHeaders); $checkResult = $this->checkResultService->createCheckResult($resolverData); $json = $resolverData->getResponse(); - - $update['earlier_check_result'] = $row['check_result']; $update['check_result'] = $checkResult->getUid(); $this->addExtraData($json, $update, self::MESSAGE_INFO); diff --git a/Configuration/TCA/tx_t3monitoring_domain_model_client.php b/Configuration/TCA/tx_t3monitoring_domain_model_client.php index 0ffac2e..21fd9d9 100644 --- a/Configuration/TCA/tx_t3monitoring_domain_model_client.php +++ b/Configuration/TCA/tx_t3monitoring_domain_model_client.php @@ -310,16 +310,5 @@ 'maxitems' => 1, ], ], - 'earlier_check_result' => [ - 'label' => 'LLL:EXT:t3monitoring/Resources/Private/Language/locallang.xlf:tx_t3monitoring_domain_model_client.earlier_check_result', - 'config' => [ - 'readOnly' => true, - 'type' => 'select', - 'renderType' => 'selectSingle', - 'foreign_table' => 'tx_t3monitoring_domain_model_checkresult', - 'minitems' => 0, - 'maxitems' => 1, - ], - ], ], ];