246 lines
6.4 KiB
PHP
246 lines
6.4 KiB
PHP
<?php
|
|
/*
|
|
Author: Riccardo Di Dato
|
|
Creation Date: 05/feb/2016
|
|
*/
|
|
|
|
class PipelineHelper {
|
|
|
|
private static function sumFieldFilterDate($filter, $field, $from = null, $to = null) {
|
|
if (!is_null($from) || !is_null($to)) {
|
|
$filter['time'] = [];
|
|
if (!is_null($from)) {
|
|
$filter['time'] = [
|
|
'$gte' => new MongoDB\BSON\UTCDateTime($from * 1000)
|
|
];
|
|
}
|
|
if (!is_null($to)) {
|
|
$filter['time'] = [
|
|
'$lte' => new MongoDB\BSON\UTCDateTime($to * 1000)
|
|
];
|
|
}
|
|
}
|
|
$rval = [
|
|
[
|
|
'$match' => $filter
|
|
],
|
|
[
|
|
'$group' => [
|
|
'_id' => null,
|
|
'tot' => ['$sum' => '$'.$field]
|
|
]
|
|
]
|
|
];
|
|
return $rval;
|
|
}
|
|
|
|
public static function getNotiziaImpressions($id, $from = null, $to = null){
|
|
return self::sumFieldFilterDate(
|
|
[
|
|
'notizia' => $id
|
|
],
|
|
'views',
|
|
$from,
|
|
$to
|
|
);
|
|
}
|
|
|
|
public static function getBannerImpressions($id, $from = null, $to = null){
|
|
return self::sumFieldFilterDate(
|
|
[
|
|
'banner' => $id
|
|
],
|
|
'views',
|
|
$from,
|
|
$to
|
|
);
|
|
}
|
|
|
|
public static function getBannerClicks($id, $from = null, $to = null){
|
|
return self::sumFieldFilterDate(
|
|
[
|
|
'banner' => $id
|
|
],
|
|
'clicks',
|
|
$from,
|
|
$to
|
|
);
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public static function getDailyVisualizationPipeline($startDate){
|
|
return [
|
|
[
|
|
'$match' => [
|
|
'time' => [
|
|
'$gte'=>new MongoDB\BSON\UTCDateTime($startDate * 1000)
|
|
]
|
|
]
|
|
],
|
|
[
|
|
'$group' => [
|
|
'_id' => [
|
|
'y' => '$y',
|
|
'm' => '$m',
|
|
'd' => '$d'
|
|
],
|
|
'visualizzazioni' => ['$sum' => '$views'],
|
|
'unici' => ['$sum' => '$absNewVisitors'],
|
|
'visitatori' => ['$sum' => '$dayNewVisitors'],
|
|
]
|
|
],
|
|
[
|
|
'$sort' => [
|
|
"_id.y"=>1,
|
|
"_id.m"=>1,
|
|
"_id.d"=>1
|
|
]
|
|
]
|
|
];
|
|
}
|
|
|
|
public static function getDailyVisualizationPipelineByStartAndEnd($startDate,$endDate) {
|
|
return [
|
|
[
|
|
'$match' => [
|
|
'time' => [
|
|
'$gte' => new MongoDB\BSON\UTCDateTime($startDate * 1000),
|
|
'$lte' => new MongoDB\BSON\UTCDateTime($endDate * 1000)
|
|
]
|
|
]
|
|
],
|
|
[
|
|
'$group' => [
|
|
"_id" => [
|
|
'y' => '$y',
|
|
'm' => '$m',
|
|
'd' => '$d'
|
|
],
|
|
"visualizzazioni" => [
|
|
'$sum' => '$views'
|
|
],
|
|
"unici" => [
|
|
'$sum' => '$absNewVisitors'
|
|
],
|
|
"visitatori" => [
|
|
'$sum' => '$dayNewVisitors'
|
|
],
|
|
]
|
|
],
|
|
[
|
|
'$sort' => [
|
|
"_id.y"=>1,
|
|
"_id.m"=>1,
|
|
"_id.d"=>1
|
|
]
|
|
]
|
|
];
|
|
}
|
|
|
|
public static function getMonthlyVisualizationPipeline($startDate){
|
|
return [
|
|
[
|
|
'$match' => [
|
|
'time' => [
|
|
'$gte'=>new MongoDB\BSON\UTCDateTime($startDate * 1000)
|
|
]
|
|
]
|
|
],
|
|
[
|
|
'$group' => [
|
|
"_id" => [
|
|
'y' => '$y',
|
|
'm' => '$m'
|
|
],
|
|
"visualizzazioni" => [
|
|
'$sum' => '$views'
|
|
],
|
|
"unici" => [
|
|
'$sum' => '$absNewVisitors'
|
|
],
|
|
"visitatori" => [
|
|
'$sum' => '$monthNewVisitors'
|
|
],
|
|
]
|
|
],
|
|
[
|
|
'$sort' => [
|
|
"_id.y"=>1,
|
|
"_id.m"=>1
|
|
]
|
|
]
|
|
];
|
|
}
|
|
|
|
|
|
/**
|
|
* Il risultato di questa pipeline restituisce un oggetto con _id.banner contenente l'id del banner e visualizzazioni contenente il numero
|
|
* di visualizzazioni per oggi ordinati in modo crescente per visualizzazioni
|
|
* @param unknown $position
|
|
* @return mixed
|
|
*/
|
|
public static function getTodaysBannerVisualizationPipeline($position) {
|
|
// ?TODO: QUesto metodo potrebbe essere obsoleto
|
|
$rval = array(
|
|
array(
|
|
'$match'=>array(
|
|
'statType'=>StatisticModel::STAT_TYPE_BANNER_IMPRESSION,
|
|
'content.position'=>$position,
|
|
// 'date'=>array( '$gte'=>new MongoDate(strtotime("today")) )
|
|
'date'=>array( '$gte'=>new MongoDB\BSON\UTCDateTime(strtotime("today CET") * 1000) )
|
|
)
|
|
),
|
|
array(
|
|
'$group'=>array(
|
|
"_id"=>array(
|
|
'banner'=>'$content.banner',
|
|
),
|
|
"visualizzazioni"=>array(
|
|
'$sum'=>1
|
|
)
|
|
)
|
|
),
|
|
array(
|
|
'$sort'=>array(
|
|
"visualizzazioni"=>1
|
|
)
|
|
)
|
|
);
|
|
return $rval;
|
|
}
|
|
|
|
/**
|
|
* Il risultato di questa pipeline restituisce un oggetto con _id.banner contenente l'id del banner e visualizzazioni contenente il numero
|
|
* di visualizzazioni per oggi ordinati in modo crescente per visualizzazioni
|
|
* @param unknown $position
|
|
* @return mixed
|
|
*/
|
|
public static function getMostViewedOfLastDays($startDate, $limit = 5) {
|
|
return [
|
|
[
|
|
'$match' => [
|
|
'time' => [
|
|
'$gte'=>new MongoDB\BSON\UTCDateTime($startDate * 1000)
|
|
]
|
|
]
|
|
],
|
|
[
|
|
'$sort' => [
|
|
"views"=> -1
|
|
]
|
|
],
|
|
[
|
|
'$limit' => $limit
|
|
]
|
|
];
|
|
}
|
|
|
|
}
|
|
|
|
?>
|