-
Notifications
You must be signed in to change notification settings - Fork 6
/
Copy pathAPI.php
102 lines (87 loc) · 3.31 KB
/
API.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
<?php
/**
* Piwik - Open source web analytics
*
* @link http://github.com/halfdan/piwik-barometer-plugin
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*
* @category Piwik_Plugins
* @package Piwik_Barometer
*/
namespace Piwik\Plugins\Barometer;
use Piwik\Date;
class API extends \Piwik\Plugin\API {
/**
* Retrieves visit count from lastMinutes and peak visit count from lastDays
* in lastMinutes interval for site with idSite.
*
* @param int $idSite
* @param int $lastMinutes
* @param int $lastDays
* @return int
*/
public function getVisitorCounter($idSite, $lastMinutes = 30, $lastDays = 30)
{
\Piwik\Piwik::checkUserHasViewAccess($idSite);
$lastMinutes = (int)$lastMinutes;
$lastDays = (int)$lastDays;
/* Time is UTC in database. */
$refNow = Date::factory('now');
$timeLimit = $refNow->subDay($lastDays)->toString('Y-m-d H:i:s');
$sql = "SELECT MAX(g.concurrent) AS maxvisit
FROM (
SELECT COUNT(idvisit) as concurrent
FROM ". \Piwik\Common::prefixTable("log_visit") . "
WHERE visit_last_action_time >= ?
AND idsite = ?
GROUP BY round(UNIX_TIMESTAMP(visit_last_action_time) / ?)
) g";
$maxvisits = \Piwik\Db::fetchOne($sql, array(
$timeLimit, $idSite, $lastMinutes * 60
));
$timeLimit = $refNow->subHour($lastMinutes / 60)->toString('Y-m-d H:i:s');
$sql = "SELECT COUNT(*)
FROM " . \Piwik\Common::prefixTable("log_visit") . "
WHERE idsite = ?
AND visit_last_action_time >= ?";
$visits = \Piwik\Db::fetchOne($sql, array(
$idSite, $timeLimit
));
return array(
'maxvisits' => (int)$maxvisits,
'visits' => (int)$visits
);
}
public function getAverageVisitTimeData($idSite, $lastMinutes = 30, $lastDays = 30)
{
\Piwik\Piwik::checkUserHasViewAccess($idSite);
$lastMinutes = (int)$lastMinutes;
$lastDays = (int)$lastDays;
/* Time is UTC in database. */
$refNow = Date::factory('now');
$timeLimit = $refNow->subDay($lastDays)->toString('Y-m-d H:i:s');
$sql = "SELECT MAX(g.average_time) AS maxtime
FROM (
SELECT AVG(visit_total_time) as average_time
FROM ". \Piwik\Common::prefixTable("log_visit") . "
WHERE visit_last_action_time >= ?
AND idsite = ?
GROUP BY round(UNIX_TIMESTAMP(visit_last_action_time) / ?)
) g";
$maxtime = \Piwik\Db::fetchOne($sql, array(
$timeLimit, $idSite, $lastMinutes * 60
));
$timeLimit = $refNow->subHour($lastMinutes / 60)->toString('Y-m-d H:i:s');
$sql = "SELECT AVG(visit_total_time)
FROM " . \Piwik\Common::prefixTable("log_visit") . "
WHERE idsite = ?
AND visit_last_action_time >= ?";
$average_time = \Piwik\Db::fetchOne($sql, array(
$idSite, $timeLimit
));
return array(
'maxtime' => (int)$maxtime,
'average_time' => (int)$average_time
);
}
}