Files
fdn2/private/lib/PipelineHelper.php
T

275 lines
6.0 KiB
PHP

<?php
/*
Author: Riccardo Di Dato
Creation Date: 05/feb/2016
*/
class PipelineHelper {
public static function getDailyVisualizationPipeline($startDate){
$rval = array(
array(
'$match'=>array(
'statType'=>StatisticModel::STAT_TYPE_PAGE,
'date'=>array(
'$gte'=>new MongoDate($startDate)
)
)
),
array(
'$group'=>array(
"_id"=>array(
'date'=>array(
"day"=>array('$dayOfMonth'=>'$date'),
"month"=>array('$month'=>'$date'),
"year"=>array('$year'=>'$date')
),
'user'=>'$user.id',
),
"visualizzazioni"=>array(
'$sum'=>1
),
"isNew"=>array(
'$sum'=>array(
'$cond'=>array(
array('$eq'=>array('$user.isNew',true)),
1,
0
)
)
)
)
),
array(
'$group'=>array(
"_id"=>array(
'date'=>'$_id.date'
),
"visualizzazioni"=>array(
'$sum'=>'$visualizzazioni'
),
"unici"=>array(
'$sum'=>'$isNew'
),
"visitatori"=>array(
'$sum'=>1
)
)
),
array(
'$sort'=>array(
"_id.date.year"=>1,
"_id.date.month"=>1,
"_id.date.day"=>1
)
)
);
return $rval;
}
public static function getDailyVisualizationPipelineByStartAndEnd($startDate,$endDate){
$rval = array(
array(
'$project'=>array(
'date'=>array(
'$add'=>array(
array('$date',60*60*1000)
)
)
)
),
array(
'$match'=>array(
'statType'=>StatisticModel::STAT_TYPE_PAGE,
'date'=>array(
'$gte'=>new MongoDate($startDate),
'$lte'=>new MongoDate($endDate)
)
)
),
array(
'$group'=>array(
"_id"=>array(
'date'=>array(
"day"=>array('$dayOfMonth'=>'$date'),
"month"=>array('$month'=>'$date'),
"year"=>array('$year'=>'$date')
),
'user'=>'$user.id',
),
"visualizzazioni"=>array(
'$sum'=>1
),
"isNew"=>array(
'$sum'=>array(
'$cond'=>array(
array('$eq'=>array('$user.isNew',true)),
1,
0
)
)
)
)
),
array(
'$group'=>array(
"_id"=>array(
'date'=>'$_id.date'
),
"visualizzazioni"=>array(
'$sum'=>'$visualizzazioni'
),
"unici"=>array(
'$sum'=>'$isNew'
),
"visitatori"=>array(
'$sum'=>1
)
)
),
array(
'$sort'=>array(
"_id.date.year"=>1,
"_id.date.month"=>1,
"_id.date.day"=>1
)
)
);
return $rval;
}
public static function getMonthlyVisualizationPipeline($startDate){
$rval = array(
array(
'$match'=>array(
'statType'=>StatisticModel::STAT_TYPE_PAGE,
'date'=>array(
'$gte'=>new MongoDate($startDate)
)
)
),
array(
'$group'=>array(
"_id"=>array(
'date'=>array(
"month"=>array('$month'=>'$date'),
"year"=>array('$year'=>'$date')
),
'user'=>'$user.id',
),
"visualizzazioni"=>array(
'$sum'=>1
),
"isNew"=>array(
'$sum'=>array(
'$cond'=>array(
array('$eq'=>array('$user.isNew',true)),
1,
0
)
)
)
)
),
array(
'$group'=>array(
"_id"=>array(
'date'=>'$_id.date'
),
"visualizzazioni"=>array(
'$sum'=>'$visualizzazioni'
),
"unici"=>array(
'$sum'=>'$isNew'
),
"visitatori"=>array(
'$sum'=>1
)
)
),
array(
'$sort'=>array(
"_id.date.year"=>1,
"_id.date.month"=>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 multitype:multitype:multitype:number multitype:multitype:unknown number multitype:MongoDate multitype:multitype:multitype:number multitype:multitype:string
*/
public static function getTodaysBannerVisualizationPipeline($position){
$rval = array(
array(
'$match'=>array(
'statType'=>StatisticModel::STAT_TYPE_BANNER_IMPRESSION,
'content.position'=>$position,
'date'=>array( '$gte'=>new MongoDate(strtotime("today")) )
)
),
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 multitype:multitype:multitype:number multitype:multitype:unknown number multitype:MongoDate multitype:multitype:multitype:number multitype:multitype:string
*/
public static function getMostViewedOfLastDays($startDate,$limit = 5){
$rval = array(
array(
'$match'=>array(
'statType'=>StatisticModel::STAT_TYPE_NOTIZIA,
'date'=>array(
'$gte'=>new MongoDate($startDate)
)
)
),
array(
'$group'=>array(
"_id"=>array(
'notizia'=>'$content.notizia',
),
"visualizzazioni"=>array(
'$sum'=>1
)
)
),
array(
'$sort'=>array(
"visualizzazioni"=>-1
)
),
array(
'$limit'=>$limit
)
);
return $rval;
}
}
?>