summaryrefslogtreecommitdiffstats
path: root/modules-available/statistics_reporting
diff options
context:
space:
mode:
authorUdo Walter2017-01-17 14:24:41 +0100
committerUdo Walter2017-01-17 14:24:41 +0100
commit6e9d2635c9fe69923a4c30cb99ab6938bfbffe27 (patch)
tree66e24f6207169ae8dc6a6b572efc78db959e464e /modules-available/statistics_reporting
parent[statistics_reporting] added vm name anonymization (diff)
downloadslx-admin-6e9d2635c9fe69923a4c30cb99ab6938bfbffe27.tar.gz
slx-admin-6e9d2635c9fe69923a4c30cb99ab6938bfbffe27.tar.xz
slx-admin-6e9d2635c9fe69923a4c30cb99ab6938bfbffe27.zip
[statistics_reporting] improved anonymization
Diffstat (limited to 'modules-available/statistics_reporting')
-rw-r--r--modules-available/statistics_reporting/hooks/cron.inc.php19
-rw-r--r--modules-available/statistics_reporting/inc/getdata.inc.php2
-rw-r--r--modules-available/statistics_reporting/inc/queries.inc.php17
3 files changed, 18 insertions, 20 deletions
diff --git a/modules-available/statistics_reporting/hooks/cron.inc.php b/modules-available/statistics_reporting/hooks/cron.inc.php
index 9b32bc96..bd427e64 100644
--- a/modules-available/statistics_reporting/hooks/cron.inc.php
+++ b/modules-available/statistics_reporting/hooks/cron.inc.php
@@ -9,8 +9,9 @@ if ($nextReporting < $time && $allowReport) {
Property::set("nextReporting", strtotime("Sunday 23:59:59"));
- GetData::$from = strtotime("Monday last week");
- GetData::$to = strtotime("Sunday last week 23:59:59");
+ GetData::$from = strtotime("last sunday - 6 days");
+ GetData::$to = strtotime("last sunday 23:59:59");
+ GetData::$salt = bin2hex(random_bytes(20));
$data = array_merge(GetData::total(true), array('perLocation' => array(), 'perClient' => array(), 'perUser' => array(), 'perVM' => array()));
$data['perLocation'] = GetData::perLocation(true);
@@ -21,15 +22,11 @@ if ($nextReporting < $time && $allowReport) {
$statisticsReport = json_encode($data);
- $url = CONFIG_REPORTING_URL;
+ $params = array("action" => "statistics", "data" => $statisticsReport);
- $curl = curl_init($url);
- curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
- curl_setopt($curl, CURLOPT_HTTPHEADER, array("Content-type: application/json"));
- curl_setopt($curl, CURLOPT_POST, true);
- curl_setopt($curl, CURLOPT_POSTFIELDS, $statisticsReport);
+ Download::asStringPost(CONFIG_REPORTING_URL, $params, 300, $code);
- $json_response = curl_exec($curl);
-
- curl_close($curl);
+ if ($code != 200) {
+ EventLog::warning("Statistics Reporting: ".$code);
+ }
}
diff --git a/modules-available/statistics_reporting/inc/getdata.inc.php b/modules-available/statistics_reporting/inc/getdata.inc.php
index cfb63658..07a13a0c 100644
--- a/modules-available/statistics_reporting/inc/getdata.inc.php
+++ b/modules-available/statistics_reporting/inc/getdata.inc.php
@@ -6,7 +6,7 @@ class GetData
public static $to;
public static $lowerTimeBound = 0;
public static $upperTimeBound = 24;
-
+ public static $salt;
// total
public static function total($anonymize = false) {
diff --git a/modules-available/statistics_reporting/inc/queries.inc.php b/modules-available/statistics_reporting/inc/queries.inc.php
index 219640a6..77deb4f8 100644
--- a/modules-available/statistics_reporting/inc/queries.inc.php
+++ b/modules-available/statistics_reporting/inc/queries.inc.php
@@ -7,7 +7,7 @@ class Queries
// Client Data: Name, Time Online, Median Time Online, Time Offline, last start, last logout, Last Time Booted, Number of Sessions > 60Sec, Number of Sessions < 60Sec, name of location, id of location (anonymized), machine uuid (anonymized)
public static function getClientStatistics($from, $to, $lowerTimeBound = 0, $upperTimeBound = 24, $excludeToday = false) {
$notassigned = Dictionary::translateFile('template-tags', 'lang_notassigned');
- $res = Database::simpleQuery("SELECT t1.name AS clientName, timeSum, medianTime, offlineSum, lastStart, lastLogout, longSessions, shortSessions, locName, MD5(locId) AS locHash, MD5(t1.uuid) AS clientHash FROM (
+ $res = Database::simpleQuery("SELECT t1.name AS clientName, timeSum, medianTime, offlineSum, lastStart, lastLogout, longSessions, shortSessions, locName, MD5(CONCAT(locId, :salt)) AS locHash, MD5(CONCAT(t1.uuid, :salt)) AS clientHash FROM (
SELECT machine.hostname AS 'name', machine.machineuuid AS 'uuid', SUM(CAST(sessionTable.length AS UNSIGNED)) AS 'timeSum', GROUP_CONCAT(sessionTable.length) AS 'medianTime', SUM(sessionTable.length >= 60) AS 'longSessions', SUM(sessionTable.length < 60) AS 'shortSessions',MAX(sessionTable.dateline + sessionTable.data) AS 'lastLogout', IFNULL(location.locationname, '$notassigned') AS 'locName', location.locationid AS 'locId'
FROM ".self::getBoundedTableQueryString('~session-length', $from, $to, $lowerTimeBound, $upperTimeBound)." sessionTable
INNER JOIN machine ON sessionTable.machineuuid = machine.machineuuid
@@ -20,14 +20,15 @@ class Queries
INNER JOIN machine ON offlineTable.machineuuid = machine.machineuuid
GROUP BY machine.machineuuid
) t2
- ON t1.uuid = t2.uuid");
+ ON t1.uuid = t2.uuid", array("salt" => GetData::$salt));
+
return $res;
}
// Location Data: Name, ID (anonymized), Time Online, Median Time Online, Time Offline, Number of Sessions > 60Sec, Number of Sessions < 60Sec
public static function getLocationStatistics($from, $to, $lowerTimeBound = 0, $upperTimeBound = 24, $excludeToday = false) {
$notassigned = Dictionary::translateFile('template-tags', 'lang_notassigned');
- $res = Database::simpleQuery("SELECT t1.locName AS locName, MD5(locId) AS locHash, timeSum, medianTime, offlineSum, longSessions, shortSessions FROM (
+ $res = Database::simpleQuery("SELECT t1.locName AS locName, MD5(CONCAT(locId, :salt)) AS locHash, timeSum, medianTime, offlineSum, longSessions, shortSessions FROM (
SELECT IFNULL(location.locationname, '$notassigned') AS 'locName', location.locationid AS 'locId', SUM(CAST(sessionTable.length AS UNSIGNED)) AS 'timeSum', GROUP_CONCAT(sessionTable.length) AS 'medianTime', SUM(sessionTable.length >= 60) AS 'longSessions', SUM(sessionTable.length < 60) AS 'shortSessions'
FROM ".self::getBoundedTableQueryString('~session-length', $from, $to, $lowerTimeBound, $upperTimeBound)." sessionTable
INNER JOIN machine ON sessionTable.machineuuid = machine.machineuuid
@@ -41,13 +42,13 @@ class Queries
LEFT JOIN location ON machine.locationid = location.locationid
GROUP BY location.locationname
) t2
- ON t1.locName = t2.locName");
+ ON t1.locName = t2.locName", array("salt" => GetData::$salt));
return $res;
}
// User Data: Name, Name(anonymized), Number of Logins
public static function getUserStatistics($from, $to, $lowerTimeBound = 0, $upperTimeBound = 24) {
- $res = Database::simpleQuery("SELECT username AS name, IF(username = 'anonymous', 'anonymous', md5(username)) AS userHash, COUNT(*) AS 'count'
+ $res = Database::simpleQuery("SELECT username AS name, IF(username = 'anonymous', 'anonymous', md5(CONCAT(username, :salt))) AS userHash, COUNT(*) AS 'count'
FROM statistic
WHERE typeid='.vmchooser-session-name' AND dateline+data >= $from and dateline <= $to AND (
(@daysDiff := (TO_DAYS(FROM_UNIXTIME(@end := IF(dateline+data > $to, $to, dateline+data), '%y-%m-%d')) - TO_DAYS(FROM_UNIXTIME(@start := IF(dateline < $from, $from, dateline), '%y-%m-%d'))) = 0
@@ -58,13 +59,13 @@ class Queries
@daysDiff >= 2
)
GROUP BY username
- ORDER BY 2 DESC");
+ ORDER BY 2 DESC", array("salt" => GetData::$salt));
return $res;
}
// Virtual Machine Data: Name, Number of Usages
public static function getVMStatistics($from, $to, $lowerTimeBound = 0, $upperTimeBound = 24) {
- $res = Database::simpleQuery("SELECT data AS name, MD5(data) AS vmHash, COUNT(*) AS 'count'
+ $res = Database::simpleQuery("SELECT data AS name, MD5(CONCAT(data, :salt)) AS vmHash, COUNT(*) AS 'count'
FROM statistic
WHERE typeid='.vmchooser-session-name' AND dateline+data >= $from and dateline <= $to AND (
(@daysDiff := (TO_DAYS(FROM_UNIXTIME(@end := IF(dateline+data > $to, $to, dateline+data), '%y-%m-%d')) - TO_DAYS(FROM_UNIXTIME(@start := IF(dateline < $from, $from, dateline), '%y-%m-%d'))) = 0
@@ -75,7 +76,7 @@ class Queries
@daysDiff >= 2
)
GROUP BY data
- ORDER BY 2 DESC");
+ ORDER BY 2 DESC", array("salt" => GetData::$salt));
return $res;
}