‪TYPO3CMS  ‪main
TimeTracker.php
Go to the documentation of this file.
1 <?php
2 
3 declare(strict_types=1);
4 
5 /*
6  * This file is part of the TYPO3 CMS project.
7  *
8  * It is free software; you can redistribute it and/or modify it under
9  * the terms of the GNU General Public License, either version 2
10  * of the License, or any later version.
11  *
12  * For the full copyright and license information, please read the
13  * LICENSE.txt file that was distributed with this source code.
14  *
15  * The TYPO3 project - inspiring people to share!
16  */
17 
19 
20 use Psr\Log\LogLevel;
22 use TYPO3\CMS\Core\Imaging\IconSize;
25 
34 {
38  protected bool ‪$isEnabled = false;
39 
43  protected int ‪$starttime = 0;
44 
48  protected float ‪$finishtime = 0;
49 
56  public bool ‪$LR = true;
57 
58  protected array ‪$wrapError = [
59  LogLevel::INFO => ['', ''],
60  LogLevel::NOTICE => ['<strong>', '</strong>'],
61  LogLevel::WARNING => ['<strong style="color:#ff6600;">', '</strong>'],
62  LogLevel::ERROR => ['<strong style="color:#ff0000;">', '</strong>'],
63  ];
64 
65  protected array ‪$wrapIcon = [
66  LogLevel::INFO => '',
67  LogLevel::NOTICE => 'actions-document-info',
68  LogLevel::WARNING => 'status-dialog-warning',
69  LogLevel::ERROR => 'status-dialog-error',
70  ];
71 
72  protected int ‪$uniqueCounter = 0;
73  protected array ‪$tsStack = [[]];
74  protected int ‪$tsStackLevel = 0;
75  protected array ‪$tsStackLevelMax = [];
76  protected array ‪$tsStackLog = [];
77  protected int ‪$tsStackPointer = 0;
78  protected array ‪$currentHashPointer = [];
79 
83  public function ‪__construct(bool ‪$isEnabled = true)
84  {
85  $this->‪isEnabled = ‪$isEnabled;
86  }
87 
96  public function ‪push(string $tslabel, string $value = ''): void
97  {
98  if (!$this->‪isEnabled) {
99  return;
100  }
101  $this->tsStack[‪$this->tsStackPointer][] = $tslabel;
102  $this->currentHashPointer[] = 'timetracker_' . $this->uniqueCounter++;
103  $this->tsStackLevel++;
104  $this->tsStackLevelMax[] = ‪$this->tsStackLevel;
105  // setTSlog
106  $k = end($this->currentHashPointer);
107  $this->tsStackLog[$k] = [
108  'level' => ‪$this->tsStackLevel,
109  'tsStack' => ‪$this->tsStack,
110  'value' => $value,
111  'starttime' => microtime(true),
112  'stackPointer' => ‪$this->tsStackPointer,
113  ];
114  }
115 
123  public function ‪pull(string $content = ''): void
124  {
125  if (!$this->‪isEnabled) {
126  return;
127  }
128  $k = end($this->currentHashPointer);
129  $this->tsStackLog[$k]['endtime'] = microtime(true);
130  $this->tsStackLog[$k]['content'] = $content;
131  $this->tsStackLevel--;
132  array_pop($this->tsStack[$this->tsStackPointer]);
133  array_pop($this->currentHashPointer);
134  }
135 
143  public function ‪setTSlogMessage(string $content, string $logLevel = LogLevel::INFO): void
144  {
145  if (!$this->‪isEnabled) {
146  return;
147  }
148  end($this->currentHashPointer);
149  $k = current($this->currentHashPointer);
150  $placeholder = '';
151  // Enlarge the "details" column by adding a span
152  if (strlen($content) > 30) {
153  $placeholder = '<br /><span style="width: 300px; height: 1px; display: inline-block;"></span>';
154  }
155  $iconFactory = GeneralUtility::makeInstance(IconFactory::class);
156  $this->tsStackLog[$k]['message'][] = $iconFactory->getIcon($this->wrapIcon[$logLevel], IconSize::SMALL)->render() . $this->wrapError[$logLevel][0] . htmlspecialchars($content) . $this->wrapError[$logLevel][1] . $placeholder;
157  }
158 
162  public function ‪setEnabled(bool ‪$isEnabled = true): void
163  {
164  $this->‪isEnabled = ‪$isEnabled;
165  }
166 
173  public function ‪start(?float $starttime = null): void
174  {
175  if (!$this->‪isEnabled) {
176  return;
177  }
178  $this->starttime = $this->‪getMilliseconds($starttime);
179  }
180 
189  public function ‪incStackPointer(): void
190  {
191  if (!$this->‪isEnabled) {
192  return;
193  }
194  $this->tsStackPointer++;
195  $this->tsStack[‪$this->tsStackPointer] = [];
196  }
197 
206  public function ‪decStackPointer(): void
207  {
208  if (!$this->‪isEnabled) {
209  return;
210  }
211  unset($this->tsStack[$this->tsStackPointer]);
212  $this->tsStackPointer--;
213  }
214 
221  protected function ‪getMilliseconds(?float $microtime = null): int
222  {
223  if (!$this->‪isEnabled) {
224  return 0;
225  }
226  if ($microtime === null) {
227  $microtime = microtime(true);
228  }
229  return (int)round($microtime * 1000);
230  }
231 
239  public function ‪getDifferenceToStarttime(float $microtime = null): int
240  {
241  return $this->‪getMilliseconds($microtime) - ‪$this->starttime;
242  }
243 
250  public function ‪finish(): void
251  {
252  if ($this->‪isEnabled) {
253  $this->finishtime = microtime(true);
254  }
255  }
256 
261  public function ‪getParseTime(): int
262  {
263  if (!$this->starttime) {
264  $this->‪start(microtime(true));
265  }
266  if (!$this->finishtime) {
267  $this->‪finish();
268  }
269  return $this->‪getDifferenceToStarttime($this->finishtime ?? null);
270  }
271 
275  public function ‪isEnabled(): bool
276  {
277  return ‪$this->isEnabled;
278  }
279 
283  public function ‪getTypoScriptLogStack(): array
284  {
285  return ‪$this->tsStackLog;
286  }
287 }
‪TYPO3\CMS\Core\TimeTracker\TimeTracker\$tsStackLog
‪array $tsStackLog
Definition: TimeTracker.php:76
‪TYPO3\CMS\Core\TimeTracker\TimeTracker\$tsStack
‪array $tsStack
Definition: TimeTracker.php:73
‪TYPO3\CMS\Core\TimeTracker\TimeTracker\incStackPointer
‪incStackPointer()
Definition: TimeTracker.php:189
‪TYPO3\CMS\Core\TimeTracker\TimeTracker\$wrapError
‪array $wrapError
Definition: TimeTracker.php:58
‪TYPO3\CMS\Core\TimeTracker\TimeTracker\decStackPointer
‪decStackPointer()
Definition: TimeTracker.php:206
‪TYPO3\CMS\Core\TimeTracker\TimeTracker\setEnabled
‪setEnabled(bool $isEnabled=true)
Definition: TimeTracker.php:162
‪TYPO3\CMS\Core\TimeTracker\TimeTracker\$starttime
‪int $starttime
Definition: TimeTracker.php:43
‪TYPO3\CMS\Core\TimeTracker\TimeTracker\start
‪start(?float $starttime=null)
Definition: TimeTracker.php:173
‪TYPO3\CMS\Core\TimeTracker\TimeTracker\$isEnabled
‪bool $isEnabled
Definition: TimeTracker.php:38
‪TYPO3\CMS\Core\TimeTracker\TimeTracker\__construct
‪__construct(bool $isEnabled=true)
Definition: TimeTracker.php:83
‪TYPO3\CMS\Core\TimeTracker\TimeTracker\getTypoScriptLogStack
‪getTypoScriptLogStack()
Definition: TimeTracker.php:283
‪TYPO3\CMS\Core\Imaging\IconFactory
Definition: IconFactory.php:34
‪TYPO3\CMS\Core\TimeTracker\TimeTracker\$tsStackPointer
‪int $tsStackPointer
Definition: TimeTracker.php:77
‪TYPO3\CMS\Core\TimeTracker\TimeTracker\finish
‪finish()
Definition: TimeTracker.php:250
‪TYPO3\CMS\Core\TimeTracker\TimeTracker\$wrapIcon
‪array $wrapIcon
Definition: TimeTracker.php:65
‪TYPO3\CMS\Core\TimeTracker\TimeTracker\pull
‪pull(string $content='')
Definition: TimeTracker.php:123
‪TYPO3\CMS\Core\TimeTracker\TimeTracker\$finishtime
‪float $finishtime
Definition: TimeTracker.php:48
‪TYPO3\CMS\Core\TimeTracker\TimeTracker\$uniqueCounter
‪int $uniqueCounter
Definition: TimeTracker.php:72
‪TYPO3\CMS\Core\TimeTracker\TimeTracker\$tsStackLevel
‪int $tsStackLevel
Definition: TimeTracker.php:74
‪TYPO3\CMS\Core\TimeTracker\TimeTracker\getParseTime
‪getParseTime()
Definition: TimeTracker.php:261
‪TYPO3\CMS\Core\TimeTracker\TimeTracker\$LR
‪bool $LR
Definition: TimeTracker.php:56
‪TYPO3\CMS\Core\TimeTracker\TimeTracker\getDifferenceToStarttime
‪int getDifferenceToStarttime(float $microtime=null)
Definition: TimeTracker.php:239
‪TYPO3\CMS\Core\TimeTracker\TimeTracker\getMilliseconds
‪int getMilliseconds(?float $microtime=null)
Definition: TimeTracker.php:221
‪TYPO3\CMS\Core\TimeTracker\TimeTracker\$currentHashPointer
‪array $currentHashPointer
Definition: TimeTracker.php:78
‪TYPO3\CMS\Core\TimeTracker\TimeTracker\setTSlogMessage
‪setTSlogMessage(string $content, string $logLevel=LogLevel::INFO)
Definition: TimeTracker.php:143
‪TYPO3\CMS\Core\SingletonInterface
Definition: SingletonInterface.php:22
‪TYPO3\CMS\Core\Utility\GeneralUtility
Definition: GeneralUtility.php:52
‪TYPO3\CMS\Core\TimeTracker\TimeTracker\isEnabled
‪isEnabled()
Definition: TimeTracker.php:275
‪TYPO3\CMS\Core\TimeTracker\TimeTracker
Definition: TimeTracker.php:34
‪TYPO3\CMS\Core\TimeTracker\TimeTracker\$tsStackLevelMax
‪array $tsStackLevelMax
Definition: TimeTracker.php:75
‪TYPO3\CMS\Core\TimeTracker
Definition: TimeTracker.php:18
‪TYPO3\CMS\Core\TimeTracker\TimeTracker\push
‪push(string $tslabel, string $value='')
Definition: TimeTracker.php:96