zend-blog-3-backend
63 строки · 1.7 Кб
1<?php
2
3namespace App\Cron\Hourly;
4
5use App\Cron\HourlyCronServiceInterface;
6use App\Doctrine\DBAL\Type\MillisecondsDateTime;
7use App\Entity\SystemParameters;
8use App\Repository\TrackingRepository;
9use App\Service\SystemParametersStorage;
10
11class BlogServerErrors implements HourlyCronServiceInterface
12{
13/**
14* @var TrackingRepository
15*/
16private TrackingRepository $repository;
17
18/**
19* @var SystemParametersStorage
20*/
21private SystemParametersStorage $paramStorage;
22
23/**
24* @var array
25*/
26private array $errors = [];
27
28/**
29* @param TrackingRepository $repository
30* @param SystemParametersStorage $paramStorage
31*/
32public function __construct(TrackingRepository $repository, SystemParametersStorage $paramStorage)
33{
34$this->repository = $repository;
35$this->paramStorage = $paramStorage;
36}
37
38public function run(): void
39{
40$from = $this->paramStorage->getParameter(SystemParameters::ERRORS_5XX_CHECK) ?? '2023-06-01 00:00:00';
41$now = (new \DateTime())->format(MillisecondsDateTime::FORMAT_TIME);
42
43$this->errors = $this->repository->getDataAboutServerErrors($from, $now);
44$this->paramStorage->saveParameter(SystemParameters::ERRORS_5XX_CHECK, $now);
45}
46
47/**
48* @return string|null
49*/
50public function getMessage(): ?string
51{
52if (count($this->errors)) {
53$message = '';
54foreach ($this->errors as $error) {
55$message .= sprintf("\n%d %s", $error['cnt'], $error['requestURI'] ?: 'articleID: ' . $error['postID']);
56}
57
58return $message;
59}
60
61return null;
62}
63}
64