1
|
|
|
<?php |
2
|
|
|
|
3
|
|
|
namespace Jns\Bundle\XhprofBundle\Document; |
4
|
|
|
|
5
|
|
|
use iXHProfRuns; |
6
|
|
|
use Doctrine\ODM\MongoDB\DocumentManager; |
7
|
|
|
|
8
|
|
|
class XhguiRuns implements iXHProfRuns |
9
|
|
|
{ |
10
|
|
|
/** |
11
|
|
|
* @var DocumentManager |
12
|
|
|
*/ |
13
|
|
|
private $documentManager; |
14
|
|
|
|
15
|
1 |
|
public function __construct(DocumentManager $documentManager) { |
16
|
1 |
|
$this->documentManager = $documentManager; |
17
|
1 |
|
} |
18
|
|
|
|
19
|
|
|
/** |
20
|
|
|
* {@inheritDoc} |
21
|
|
|
*/ |
22
|
|
|
public function get_run($run_id, $type, &$run_desc) { |
23
|
|
|
throw new \Exception('not implemented'); |
24
|
|
|
} |
25
|
|
|
|
26
|
|
|
/** |
27
|
|
|
* {@inheritDoc} |
28
|
|
|
*/ |
29
|
|
|
public function save_run($xhprof_data, $type, $run_id = null) { |
30
|
|
|
if (!class_exists('\Xhgui_Profiles') || !class_exists('\Xhgui_Saver_Mongo')) { |
31
|
|
|
throw new \Exception('composer require perftools/xhgui dev-master'); |
32
|
|
|
} |
33
|
|
|
$data = $this->prepareForSave($xhprof_data); |
34
|
|
|
$dbname = $this->documentManager->getConfiguration()->getDefaultDB(); |
35
|
|
|
$mongo = $this->documentManager->getConnection()->getMongoClient()->selectDB($dbname); |
36
|
|
|
$profiles = new \Xhgui_Profiles($mongo); |
37
|
|
|
$saver = new \Xhgui_Saver_Mongo($profiles); |
38
|
|
|
try { |
39
|
|
|
$saver->save($data); |
40
|
|
|
$run_id = (string)$data['_id']; |
41
|
|
|
} catch (\Exception $e) { |
42
|
|
|
error_log($e->getMessage()); |
43
|
|
|
} |
44
|
|
|
return $run_id; |
45
|
|
|
} |
46
|
|
|
|
47
|
|
|
/** |
48
|
|
|
* @see https://github.com/perftools/xhgui/blob/ad532c42e55cf8b3413b8d7a2241eea1140b537f/external/header.php#L88 |
49
|
|
|
* @todo instead of this copy pasta, refactor the perftools/xhgui side of things then reuse here |
50
|
|
|
*/ |
51
|
|
|
private function prepareForSave($xhprof_data) { |
52
|
|
|
$data = array('profile' => $xhprof_data); |
53
|
|
|
$uri = array_key_exists('REQUEST_URI', $_SERVER) |
54
|
|
|
? $_SERVER['REQUEST_URI'] |
55
|
|
|
: null; |
56
|
|
|
if (empty($uri) && isset($_SERVER['argv'])) { |
57
|
|
|
$cmd = basename($_SERVER['argv'][0]); |
58
|
|
|
$uri = $cmd . ' ' . implode(' ', array_slice($_SERVER['argv'], 1)); |
59
|
|
|
} |
60
|
|
|
$time = array_key_exists('REQUEST_TIME', $_SERVER) |
61
|
|
|
? $_SERVER['REQUEST_TIME'] |
62
|
|
|
: time(); |
63
|
|
|
$requestTimeFloat = explode('.', $_SERVER['REQUEST_TIME_FLOAT']); |
64
|
|
|
if (!isset($requestTimeFloat[1])) { |
65
|
|
|
$requestTimeFloat[1] = 0; |
66
|
|
|
} |
67
|
|
|
// if (Xhgui_Config::read('save.handler') === 'file') { |
68
|
|
|
// $requestTs = array('sec' => $time, 'usec' => 0); |
69
|
|
|
// $requestTsMicro = array('sec' => $requestTimeFloat[0], 'usec' => $requestTimeFloat[1]); |
70
|
|
|
// } else { |
71
|
|
|
$requestTs = new \MongoDate($time); |
72
|
|
|
$requestTsMicro = new \MongoDate($requestTimeFloat[0], $requestTimeFloat[1]); |
73
|
|
|
// } |
74
|
|
|
$data['meta'] = array( |
75
|
|
|
'url' => $uri, |
76
|
|
|
'SERVER' => $_SERVER, |
77
|
|
|
'get' => $_GET, |
78
|
|
|
'env' => $_ENV, |
79
|
|
|
'simple_url' => \Xhgui_Util::simpleUrl($uri), |
80
|
|
|
'request_ts' => $requestTs, |
81
|
|
|
'request_ts_micro' => $requestTsMicro, |
82
|
|
|
'request_date' => date('Y-m-d', $time), |
83
|
|
|
); |
84
|
|
|
return $data; |
85
|
|
|
} |
86
|
|
|
} |
87
|
|
|
|