Завел статистику по запрсам API

parent f1e25e72
...@@ -18,6 +18,11 @@ return [ ...@@ -18,6 +18,11 @@ return [
'transactions' => '#1F77B4', 'transactions' => '#1F77B4',
'salemoney' => '#FF7F0E', 'salemoney' => '#FF7F0E',
'admoney' => '#9467BD', 'admoney' => '#9467BD',
'Views' => '#2CA02C',
'Clicks' => '#D62728',
'Orders' => '#1F77B4',
'OrderSum' => '#FF7F0E',
'AdMoney' => '#9467BD',
] ]
] ]
]; ];
...@@ -7,6 +7,7 @@ $(document).ready(function(){ ...@@ -7,6 +7,7 @@ $(document).ready(function(){
//selectorActiveDays = '.b-filter__switch.days .m-filter__switch-item_active', //selectorActiveDays = '.b-filter__switch.days .m-filter__switch-item_active',
//selectorActiveData = '.b-filter__switch.metric-data .m-filter__switch-item_active', //selectorActiveData = '.b-filter__switch.metric-data .m-filter__switch-item_active',
activeLine = $(selectorActiveLine).data('filter-category'), activeLine = $(selectorActiveLine).data('filter-category'),
activeLines,
//activeTime, //activeTime,
activeDays, activeDays,
toggelDates = [], toggelDates = [],
...@@ -92,11 +93,14 @@ $(document).ready(function(){ ...@@ -92,11 +93,14 @@ $(document).ready(function(){
$.extend({ $.extend({
ChartStat: { ChartStat: {
DateStat: function(dataLineChartStat) { DateStat: function(dataLineChartStat) {
console.log('AAA DateStat: ', dataLineChartStat);
var activeLines = ['shows', 'clicks', 'transactions', 'salemoney', 'admoney']; //activeLines = ['shows', 'clicks', 'transactions', 'salemoney', 'admoney'];
activeLine = 'shows'; //activeLine = 'shows';
if (dataLineChartStat.report == 'common') {
//console.log('AAA DateStat: ', dataLineChartStat); activeLines = ['Views', 'Clicks', 'Orders', 'OrderSum', 'AdMoney'];
activeLine = 'Views';
}
// Диапазон дат: // Диапазон дат:
if (dataLineChartStat.type == 'interval') { if (dataLineChartStat.type == 'interval') {
......
...@@ -47,7 +47,7 @@ $(document).ready(function(){ ...@@ -47,7 +47,7 @@ $(document).ready(function(){
$chartStatError = $('.chart-graph-stat-error'), $chartStatError = $('.chart-graph-stat-error'),
$chartStatErrorMessage = $('.chart-graph-stat-error .message'), $chartStatErrorMessage = $('.chart-graph-stat-error .message'),
periodStatsData, periodStatsData,
campaignStatsData, //campaignStatsData,
dataLineChartStat; dataLineChartStat;
...@@ -61,9 +61,11 @@ $(document).ready(function(){ ...@@ -61,9 +61,11 @@ $(document).ready(function(){
if ($('#period-stats').val()) { if ($('#period-stats').val()) {
periodStatsData = JSON.parse($('#period-stats').val()); periodStatsData = JSON.parse($('#period-stats').val());
} }
/*
if ($('#campaign-stats').val()) { if ($('#campaign-stats').val()) {
campaignStatsData = JSON.parse($('#campaign-stats').val()); campaignStatsData = JSON.parse($('#campaign-stats').val());
} }
*/
// Устанавливаем данные по периоду в качестве стартовых: // Устанавливаем данные по периоду в качестве стартовых:
dataLineChartStat = periodStatsData; dataLineChartStat = periodStatsData;
//console.log('AAA dataLineChartStat = ', dataLineChartStat); //console.log('AAA dataLineChartStat = ', dataLineChartStat);
...@@ -143,7 +145,8 @@ $(document).ready(function(){ ...@@ -143,7 +145,8 @@ $(document).ready(function(){
$this.addClass('selected').toggleClass('desc'); $this.addClass('selected').toggleClass('desc');
if ($this.hasClass('main-cat')) { if ($this.hasClass('main-cat')) {
dataLineChartStat = ($this.hasClass('date')) ? periodStatsData : campaignStatsData; //dataLineChartStat = ($this.hasClass('date')) ? periodStatsData : campaignStatsData;
dataLineChartStat = periodStatsData;
$tableHeadColsChecks.attr("disabled", $this.hasClass('campaign')); $tableHeadColsChecks.attr("disabled", $this.hasClass('campaign'));
} }
renderHourTable(); renderHourTable();
...@@ -197,8 +200,9 @@ $(document).ready(function(){ ...@@ -197,8 +200,9 @@ $(document).ready(function(){
//console.log("AAA requestDataStat SUCCESS res: ", res); //console.log("AAA requestDataStat SUCCESS res: ", res);
ShowChartData(); ShowChartData();
periodStatsData = res.period; //periodStatsData = res.period;
campaignStatsData = res.campaign; //campaignStatsData = res.campaign;
periodStatsData = res;
dataLineChartStat = periodStatsData; dataLineChartStat = periodStatsData;
$('.main-cat').removeClass('selected'); $('.main-cat').removeClass('selected');
$('.main-cat.date').addClass('selected'); $('.main-cat.date').addClass('selected');
......
...@@ -109,12 +109,20 @@ class Cabinet extends Common ...@@ -109,12 +109,20 @@ class Cabinet extends Common
switch ($report_type) { switch ($report_type) {
case 'common': case 'common':
/** @var \App\Model\Feeds $statDaysModel */ /** @var \App\Model\Feeds $statDaysModel */
$statsDaysModel = $this->container->get(StatsDays::class); //$statsDaysModel = $this->container->get(StatsDays::class);
//$stats = $statsDaysModel->findAll(['FeedID' => $feed_id_list])->toArray(); //$stats = $statsDaysModel->findAll(['FeedID' => $feed_id_list])->toArray();
$periodStats = $statsDaysModel->getStatsByDate($feed_id_list, $dates); //$periodStats = $statsDaysModel->getStatsByDate($feed_id_list, $dates);
$stat = $stats->getStatData($metric, $type); $periodStats = $stats->getStatData($report_type, $feed_id_list, $dates);
//$campaignStats = $statsDaysModel->getStatsByFeeds($feed_id_list, $dates);
$cats = [
'Views' => 'Показы',
'Clicks' => 'Клики',
'Orders' => 'Заказы',
'OrderSum' => 'Сумма по заказам',
'AdMoney' => 'Стоимость заказа'
];
/*
$cats = [ $cats = [
'shows' => 'Показы', 'shows' => 'Показы',
'clicks' => 'Клики', 'clicks' => 'Клики',
...@@ -123,7 +131,7 @@ class Cabinet extends Common ...@@ -123,7 +131,7 @@ class Cabinet extends Common
'admoney' => 'admoney' 'admoney' => 'admoney'
]; ];
/* $campaignStats = $statsDaysModel->getStatsByFeeds($feed_id_list, $dates);
if ($campaignStats || count($campaignStats['period'])>0) { if ($campaignStats || count($campaignStats['period'])>0) {
$feeds_names = []; $feeds_names = [];
foreach($campaignStats['period'] as $feed_id) { foreach($campaignStats['period'] as $feed_id) {
...@@ -159,21 +167,20 @@ class Cabinet extends Common ...@@ -159,21 +167,20 @@ class Cabinet extends Common
break; break;
} }
//return new JsonResponse($companyStats); /*
$periodStats['type'] = 'interval'; $periodStats['type'] = 'interval';
$periodStats['report'] = $report_type; $periodStats['report'] = $report_type;
$campaignStats['type'] = 'interval'; $campaignStats['type'] = 'interval';
$campaignStats['report'] = $report_type; $campaignStats['report'] = $report_type;
$data['campaignStats'] = $campaignStats;
*/
$data['feeds'] = $feeds; $data['feeds'] = $feeds;
$data['report'] = $report_type; $data['report'] = $report_type;
$data['current_period'] = $current_period; $data['current_period'] = $current_period;
$data['dates'] = $dates; $data['dates'] = $dates;
$data['stat'] = $stat;
$data['periodStats'] = $periodStats; $data['periodStats'] = $periodStats;
//$data['campaignStats'] = $campaignStats;
$data['cats'] = $cats; $data['cats'] = $cats;
$data['periods_list'] = $this->container->get('config')['feed_conf']['periods_list']; $data['periods_list'] = $this->container->get('config')['feed_conf']['periods_list'];
$data['colors_active_lines'] = $this->container->get('config')['feed_conf']['colors_active_lines']; $data['colors_active_lines'] = $this->container->get('config')['feed_conf']['colors_active_lines'];
...@@ -187,50 +194,6 @@ class Cabinet extends Common ...@@ -187,50 +194,6 @@ class Cabinet extends Common
return $response; return $response;
*/ */
/*
$allDomains = $listDomains;
$subdomains = true;
$allStat = false;
$group = false;
$summaryReport = $stats->getSummuryReport($allDomains, $user->getCurrencyCode(), $subdomains, $allStat, $group);
list($periodStats, $periodDates) = $stats->getPeriodReport(date('Y-m'), $allDomains, $user->getCurrencyCode(), $subdomains, $allStat, $group);
$dateIterval = new \DateInterval('P1M');
$dateStart = \DateTime::createFromFormat('Y-m-d', $periodDates['min'] ?: date('Y-m-01'));
$dateEnd = \DateTime::createFromFormat('Y-m-d', $periodDates['max'] ?: date('Y-m-01'));
$dateRange = array();
if($dateStart != $dateEnd) {
$_dateRange = new \DatePeriod($dateStart, $dateIterval, $dateEnd);
foreach($_dateRange as $dt) {
$dateRange[] = $dt;
}
}
$dateRange[] = $dateEnd;
$dateRange = array_reverse($dateRange);
$currencyModel = $this->container->get(\App\Model\Currencies::class);
$currencies = array();
foreach($currencyModel->findAll() as $currency) {
$currencies[$currency->getCode()] = $currency->getName();
}
$currentCurencyCode = $user->getCurrencyCode();
$data['sites'] = $listSites;
$data['accessSites'] = $listAccessSites;
$data['summaryStats'] = $summaryStats;
$data['periodStats'] = $periodStats;
$data['summaryReport'] = $summaryReport;
$data['listDomains'] = $listDomains;
$data['dateRange'] = $dateRange;
$data['currencies'] = $currencies;
$data['currency'] = ['code' => $currentCurencyCode, 'name' => $currencies[$currentCurencyCode]];
$data['userId'] = $userId;
*/
} catch(\Exception $e) { } catch(\Exception $e) {
$data['error'] = _t('Извините, статистика временно не работает'); $data['error'] = _t('Извините, статистика временно не работает');
} }
...@@ -251,6 +214,9 @@ class Cabinet extends Common ...@@ -251,6 +214,9 @@ class Cabinet extends Common
$auth = $this->container->get(UserService::class); $auth = $this->container->get(UserService::class);
$userId = $auth->getIdentity()->getId(); $userId = $auth->getIdentity()->getId();
/** @var \App\Model\Statistics $stats */
$stats = $this->container->get(Statistics::class);
// Выводим стр. по фидам, если за пользователем закреплен фид: // Выводим стр. по фидам, если за пользователем закреплен фид:
/** @var \App\Model\Feeds $feedsModel */ /** @var \App\Model\Feeds $feedsModel */
$feedsModel = $this->container->get(Feeds::class); $feedsModel = $this->container->get(Feeds::class);
...@@ -272,8 +238,10 @@ class Cabinet extends Common ...@@ -272,8 +238,10 @@ class Cabinet extends Common
switch ($report_type) { switch ($report_type) {
case 'common': case 'common':
/** @var \App\Model\Feeds $statDaysModel */ /** @var \App\Model\Feeds $statDaysModel */
$statsDaysModel = $this->container->get(StatsDays::class); //$statsDaysModel = $this->container->get(StatsDays::class);
$periodStats = $statsDaysModel->getStatsByDate($feed_id_list, $dates); //$periodStats = $statsDaysModel->getStatsByDate($feed_id_list, $dates);
$periodStats = $stats->getStatData($report_type, $feed_id_list, $dates);
/*
$campaignStats = $statsDaysModel->getStatsByFeeds($feed_id_list, $dates); $campaignStats = $statsDaysModel->getStatsByFeeds($feed_id_list, $dates);
if ($campaignStats || count($campaignStats['period'])>0) { if ($campaignStats || count($campaignStats['period'])>0) {
...@@ -284,7 +252,7 @@ class Cabinet extends Common ...@@ -284,7 +252,7 @@ class Cabinet extends Common
} }
$campaignStats['period'] = $feeds_names; $campaignStats['period'] = $feeds_names;
} }
*/
break; break;
case 'transaction': case 'transaction':
/** @var \App\Model\Feeds $transactionsModel */ /** @var \App\Model\Feeds $transactionsModel */
...@@ -311,6 +279,7 @@ class Cabinet extends Common ...@@ -311,6 +279,7 @@ class Cabinet extends Common
return new JsonResponse(null); return new JsonResponse(null);
} }
/*
$periodStats['type'] = 'interval'; $periodStats['type'] = 'interval';
$periodStats['report'] = $report_type; $periodStats['report'] = $report_type;
...@@ -325,6 +294,10 @@ class Cabinet extends Common ...@@ -325,6 +294,10 @@ class Cabinet extends Common
} else { } else {
$data = null; $data = null;
} }
*/
$data = $periodStats;
return new JsonResponse($data); return new JsonResponse($data);
} }
......
...@@ -20,100 +20,31 @@ class Statistics ...@@ -20,100 +20,31 @@ class Statistics
// Данные по метрикам // Данные по метрикам
public function getStatData($metric, $type) public function getStatData($report_type, $feed_id_list, $dates)
{ {
return 567; $type = 'feed_stat';
$fields = ['Views','Clicks','Orders','OrderSum'];
$timeDiff = (strtotime($dates[1])-strtotime($dates[0]))/(24*60*60);
$by_days = (bool)$dates[2];
$by_sites = (bool)$by_sites ? (int)$by_sites : false;
$by_zones = (bool)$by_zones ? (int)$by_zones : false;
$by_countries = (bool)$by_countries ? (int)$by_countries : false;
foreach(['sspProvider', 'blockProvider', 'argonProvider', 'ndspProvider'] as $field) {
$provider_field = (in_array($field, $fields)) ? $field : $provider_field;
}
$is_providers_metric = ($provider_field) ? true : false;
// Определяем разрешение выборки (группировку) по времени:
if ($timeDiff == 0) // Одни сутки
{
$dates_group = "Min";
}
elseif (!$by_days) // Набор дат
{
$dates_group = ($is_providers_metric) ? "Day" : "Min";
}
else // Несколько суток
{
$dates_group = "Day";
}
if ($by_sites || $by_zones || $by_countries) // По сайтам, зонам, странам
{
$dates_group = ($timeDiff == 0) ? "Min" : "Day";
}
if ($by_days || $by_sites || $by_zones || $by_countries) { // Диапазон дат или по сайтам, зонам странам
$dates = array( $dates = array(
'group' => $dates_group, 'group' => 'Day',
//'start' => '2019-01-01',
//'end' => '2019-01-16',
'start' => $dates[0], 'start' => $dates[0],
'end' => $dates[1], 'end' => $dates[1],
); );
} else { // Набор дат
$dates = array(
'group' => $dates_group,
'days' => [$dates[0], $dates[1]],
);
}
if ($metric == 'minstat') {
if ($by_sites) $fields = array_merge($fields, ["SiteID"]);
if ($by_zones) $fields = array_merge($fields, ["ZoneID"]);
if ($by_countries) $fields = array_merge($fields, ["Country"]);
}
// Данные для запроса: // Данные для запроса:
$dataRequest = array( $dataRequest = array(
'method' => "reports", 'method' => "reports",
'data' => array( 'data' => array(
'type' => $type, 'type' => $type,
'filters' => array(
'FeedID' => array('values' => $feed_id_list),
),
'fields' => $fields, 'fields' => $fields,
'dates' => $dates, 'dates' => $dates,
) )
); );
// Фильтры:
if ($geo != null) {
$dataRequest['data']['filters']['Country'] = array(
'values' => $geo['list'],
'excl' => (bool)$geo['exclude']
);
}
if ($sites_id != null) {
$dataRequest['data']['filters']['SiteID'] = array(
'values' => $sites_id['list'],
'excl' => (bool)$sites_id['exclude']
);
}
if ($zones_id != null) {
$dataRequest['data']['filters']['ZoneID'] = array(
'values' => $zones_id['list'],
'excl' => (bool)$zones_id['exclude']
);
}
// Лимит:
if ($metric == 'providersblockstat') {
$dataRequest['data']['limit'] = 15;
}
if ($metric == 'minstat') {
if ($by_sites) $dataRequest['data']['limit'] = $by_sites;
if ($by_zones) $dataRequest['data']['limit'] = $by_zones;
if ($by_countries) $dataRequest['data']['limit'] = $by_countries;
}
if ($metric == 'winstat') {
$dataRequest['data']['limit'] = 10;
}
//return $dataRequest; //return $dataRequest;
$stats = $this->apiRequest($dataRequest); $stats = $this->apiRequest($dataRequest);
...@@ -130,355 +61,20 @@ class Statistics ...@@ -130,355 +61,20 @@ class Statistics
$dataStats = array(); $dataStats = array();
$period = array(); $period = array();
// Метрики по сайтам, зонам, странам:
if ($by_sites || $by_zones || $by_countries)
{
if ($by_sites) $cat_type = 'SiteID';
if ($by_zones) $cat_type = 'ZoneID';
if ($by_countries) $cat_type = 'Country';
$list_sites = $this->sitesModel->createListSites();
//$list_zones = $this->zonesModel->createListZones();
if ($by_countries) {
$list_codes = $this->countryCodes;
}
// Добавление категорий и полей в списки
function AddCategories($category_data, &$all_categories_id, &$all_categories, &$all_cat, $list_sites, $list_zones, $list_codes, $metric, $cat_type)
{
foreach ($category_data as $category_id=>$category_value) {
// Список зон:
if (!in_array($category_id, $all_categories_id)) {
$all_categories_id[] = $category_id;
if ($cat_type == 'SiteID') {
$site_domain = ($list_sites[$category_id]) ? $list_sites[$category_id] : "_".$category_id;
}
if ($cat_type == 'ZoneID') {
//$site_id = $list_zones[$zone_id];
/*
if ($list_zones[$zone_id]) {
$site_id = $list_zones[$zone_id];
} else {
$site_id = floor($zone_id/100);
}
*/
$site_id = floor($category_id/100);
$site_domain = ($list_sites[$site_id]) ? $list_sites[$site_id] : "_".$site_id;
}
if ($cat_type == 'Country') {
$site_domain = ($list_codes[$category_id]) ? $list_codes[$category_id] : '';
}
$all_categories[$category_id] = $site_domain;
}
// Список категорий:
if (count($all_cat)==0) {
foreach ($category_value as $cat=>$value) {
if (!in_array($cat, $all_cat)) {
$all_cat[] = $cat;
}
}
// Добавляем поля для метрики minstat:
if ($metric == 'minstat') {
$all_cat[] = 'cpm';
$all_cat[] = 'siteCpm';
$all_cat[] = 'systemCpm';
$all_cat[] = 'ctr';
$all_cat[] = 'cpc';
$all_cat[] = 'siteCpc';
$all_cat[] = 'systemCpc';
$all_cat[] = 'sspSystemMoney';
//$all_cat[] = 'sspMoneyAll';
$all_cat[] = 'sumRatio';
$all_cat[] = 'siteRatio';
$all_cat[] = 'systemRatio';
}
}
}
}
// Формируем данные для временного промежутка
function AddDataCategoriesStats(&$dataStats, $categories_data, $all_categories_id, $all_cat, $metric)
{
// Сайты (Зоны, Страны), данные для которых есть за текущий временной интервал:
$time_categories = [];
foreach ($categories_data as $category_id=>$category_value) {
$time_categories[] = $category_id;
foreach ($category_value as $cat=>$value) {
$dataStats[$category_id][$cat][] = $value;
}
// Добавляем поля для метрики minstat:
if ($metric == 'minstat') {
$dataStats[$category_id]['cpm'][] = ($category_value['sspViewsCnt'] == 0) ? 0 : $category_value['sspMoney'] / $category_value['sspViewsCnt'] * 1000;
$dataStats[$category_id]['siteCpm'][] = ($category_value['sspViewsCnt'] == 0) ? 0 : $category_value['sspSiteMoney'] / $category_value['sspViewsCnt'] * 1000;
$dataStats[$category_id]['systemCpm'][] = ($category_value['sspViewsCnt'] == 0) ? 0 : ($category_value['sspMoney'] - $category_value['sspSiteMoney']) / $category_value['sspViewsCnt'] * 1000;
$dataStats[$category_id]['ctr'][] = ($category_value['sspViewsCnt'] == 0) ? 0 : $category_value['sspClicksCnt'] / $category_value['sspViewsCnt'] * 1;
$dataStats[$category_id]['cpc'][] = ($category_value['sspClicksCnt'] == 0) ? 0 : $category_value['sspMoney'] / $category_value['sspClicksCnt'] * 100;
$dataStats[$category_id]['siteCpc'][] = ($category_value['sspClicksCnt'] == 0) ? 0 : $category_value['sspSiteMoney'] / $category_value['sspClicksCnt'] * 100;
$dataStats[$category_id]['systemCpc'][] = ($category_value['sspClicksCnt'] == 0) ? 0 : ($category_value['sspMoney'] - $category_value['sspSiteMoney']) / $category_value['sspClicksCnt'] * 100;
$dataStats[$category_id]['sspSystemMoney'][] = $category_value['sspMoney'] - $category_value['sspSiteMoney'];
$dataStats[$category_id]['sumRatio'][] = ($category_value['sspMoney'] == 0) ? 0 : $category_value['sspMoney'] / $category_value['sspMoney'] * 1;
$dataStats[$category_id]['siteRatio'][] = ($category_value['sspMoney'] == 0) ? 0 : $category_value['sspSiteMoney'] / $category_value['sspMoney'] * 1;
$dataStats[$category_id]['systemRatio'][] = ($category_value['sspMoney'] == 0) ? 0 : ($category_value['sspMoney'] - $category_value['sspSiteMoney']) / $category_value['sspMoney'] * 1;
$all_cat[] = 'sumRatio';
$all_cat[] = 'siteRatio';
$all_cat[] = 'systemRatio';
}
}
// по провайдерам, которых нет выставляем нулевые значения:
foreach ($all_categories_id as $category_id) {
if (!in_array($category_id, $time_categories)) {
foreach ($all_cat as $cat_name) {
$dataStats[$category_id][$cat_name][] = 0;
}
}
}
}
// Определяем списки всех зон и полей:
$all_categories_id = [];
$all_categories = [];
$all_cat = [];
foreach ($stats['data']['Day'] as $day) {
// Одни сутки
if ($day['Min']) {
foreach ($day['Min'] as $min=>$value_min) {
AddCategories($value_min[$cat_type], $all_categories_id, $all_categories, $all_cat, $list_sites, $list_zones, $list_codes, $metric, $cat_type);
}
// Несколько суток (одни и более)
} else {
AddCategories($day[$cat_type], $all_categories_id, $all_categories, $all_cat, $list_sites, $list_zones, $list_codes, $metric, $cat_type);
}
}
if ($timeDiff == 0) // Одни сутки
{
foreach ($stats['data']['Day'] as $day) {
foreach ($day['Min'] as $min=>$value_min) {
$period[] = date("H:i", strtotime($min));
AddDataCategoriesStats($dataStats, $value_min[$cat_type], $all_categories_id, $all_cat, $metric);
}
}
}
else // Несколько суток (двое и более)
{
foreach ($stats['data']['Day'] as $day=>$value_day) {
$period[] = $day;
AddDataCategoriesStats($dataStats, $value_day[$cat_type], $all_categories_id, $all_cat, $metric);
}
}
$dataStats['type'] = ($timeDiff == 0) ? 'day' : 'interval';
if ($by_sites) $dataStats['bySites'] = $all_categories;
if ($by_zones) $dataStats['byZones'] = $all_categories;
if ($by_countries) $dataStats['byCountries'] = $all_categories;
}
// Метрики по провайдерам:
elseif ($is_providers_metric)
{
// Добавление провайдеров и полей в списки
function AddItems($provider_data, &$all_providers, &$all_cat, $metric)
{
foreach ($provider_data as $provider=>$provider_value) {
// Список провайдеров:
$provider_name = ($provider != "") ? $provider : "unknown";
if (!in_array($provider_name, $all_providers)) {
$all_providers[] = $provider_name;
}
// Список категорий:
if (count($all_cat)==0) {
foreach ($provider_value as $cat=>$value) {
if (!in_array($cat, $all_cat)) {
$all_cat[] = $cat;
}
}
// Добавляем поля в метрику bidstat:
if (in_array($metric, ['bidstat'])) {
$all_cat[] = 'cpm';
}
// Добавляем поля в метрику winstat:
if (in_array($metric, ['winstat'])) {
$all_cat[] = 'cpm';
$all_cat[] = 'ctr';
$all_cat[] = 'cpc';
}
// Добавляем поля в метрику providersblockstat:
if (in_array($metric, ['providersblockstat'])) {
$all_cat[] = 'ctr';
$all_cat[] = 'sum';
}
// Добавляем поля в метрику ndspstat:
if (in_array($metric, ['ndspstat'])) {
$all_cat[] = 'cpm';
$all_cat[] = 'ctr';
$all_cat[] = 'cpc';
}
}
}
asort($all_providers);
}
// Формируем данные для временного промежутка // Формируем данные для временного промежутка
function AddDataStats(&$dataStats, $providers_data, $all_providers, $all_cat, $metric) function AddDataStats(&$data_stats, $data, $date_type)
{
// Провайдеры, данные для которых есть за текущий временной интервал:
$time_providers = [];
$min_koef = ($dataStats['type'] == 'interval') ? 1 : 5;
foreach ($providers_data as $provider=>$provider_min_value) {
$provider_name = ($provider != "") ? $provider : "unknown";
$time_providers[] = $provider_name;
if ($provider_name == 'rtb') {
foreach ($provider_min_value as $cat=>$value) {
$provider_min_value['blockViewsCnt'] = $provider_min_value['sspViewsCnt'];
$provider_min_value['blockClicksCnt'] = $provider_min_value['sspClicksCnt'];
}
}
foreach ($provider_min_value as $cat=>$value) {
$dataStats[$provider_name][$cat][] = $value/$min_koef;
}
// Добавляем поля для метрики bidstat:
if ($metric == 'bidstat') {
$dataStats[$provider_name]['cpm'][] = ($provider_min_value['bidCnt'] == 0) ? 0 : $provider_min_value['bidMoney'] / $provider_min_value['bidCnt'] * 1000;
}
// Добавляем поля для метрики winstat:
if ($metric == 'winstat') {
$dataStats[$provider_name]['cpm'][] = ($provider_min_value['sspViewsCnt'] == 0) ? 0 : $provider_min_value['sspMoney'] / $provider_min_value['sspViewsCnt'] * 1000;
$dataStats[$provider_name]['ctr'][] = ($provider_min_value['sspViewsCnt'] == 0) ? 0 : $provider_min_value['sspClicksCnt'] / $provider_min_value['sspViewsCnt'] * 1;
$dataStats[$provider_name]['cpc'][] = ($provider_min_value['sspClicksCnt'] == 0) ? 0 : $provider_min_value['sspMoney'] / $provider_min_value['sspClicksCnt'] * 100;
}
// Добавляем поля для метрики providersblockstat:
if ($metric == 'providersblockstat') {
$dataStats[$provider_name]['ctr'][] = ($provider_min_value['blockViewsCnt'] == 0) ? 0 : $provider_min_value['blockClicksCnt'] / $provider_min_value['blockViewsCnt'] * 1;
$dataStats[$provider_name]['sum'][] = ($provider_min_value['blockViewsCnt'] + $provider_min_value['sspViewsCnt'])/$min_koef;
}
// Добавляем поля для метрики ndspstat:
if ($metric == 'ndspstat') {
$dataStats[$provider_name]['cpm'][] = ($provider_min_value['adViewsCnt'] == 0) ? 0 : $provider_min_value['adMoney'] / $provider_min_value['adViewsCnt'] * 1000;
$dataStats[$provider_name]['ctr'][] = ($provider_min_value['adViewsCnt'] == 0) ? 0 : $provider_min_value['adClicksCnt'] / $provider_min_value['adViewsCnt'] * 1;
$dataStats[$provider_name]['cpc'][] = ($provider_min_value['adClicksCnt'] == 0) ? 0 : $provider_min_value['adMoney'] / $provider_min_value['adClicksCnt'] * 100;
}
}
// по провайдерам, которых нет выставляем нулевые значения:
foreach ($all_providers as $provider_name) {
if (!in_array($provider_name, $time_providers)) {
foreach ($all_cat as $cat_name) {
$dataStats[$provider_name][$cat_name][] = 0;
}
}
}
}
// Определяем списки всех провайдеров и полей:
$all_providers = [];
$all_cat = [];
foreach ($stats['data']['Day'] as $day) {
// Одни сутки
if ($day['Min']) {
foreach ($day['Min'] as $min=>$value_min) {
AddItems($value_min[$provider_field], $all_providers, $all_cat, $metric);
}
// Несколько суток (одни и более)
} else {
AddItems($day[$provider_field], $all_providers, $all_cat, $metric);
}
}
if ($timeDiff == 0) // Одни сутки
{
$dataStats['type'] = 'day';
foreach ($stats['data']['Day'] as $day) {
foreach ($day['Min'] as $min=>$value_min) {
$period[] = date("H:i", strtotime($min));
AddDataStats($dataStats, $value_min[$provider_field], $all_providers, $all_cat, $metric);
}
}
}
else // Несколько суток (двое и более)
{
$dataStats['type'] = 'interval';
foreach ($stats['data']['Day'] as $day=>$value_day) {
$period[] = $day;
AddDataStats($dataStats, $value_day[$provider_field], $all_providers, $all_cat, $metric);
}
}
}
// Обычные метрики
else
{
// Формируем данные для временного промежутка
function AddDataStats(&$data_stats, $data, $metric, $date_type)
{ {
$min_koef = ($date_type == 'interval') ? 1 : 5; $min_koef = ($date_type == 'interval') ? 1 : 5;
foreach ($data as $cat=>$value) { foreach ($data as $cat=>$value) {
$data_stats[$cat][] = $value/$min_koef; $data_stats[$cat][] = $value/$min_koef;
} }
// Временно:
// Добавляем поля для метрики pagestat: $data_stats['AdMoney'][] = 2240 + $data['Orders'];
if ($metric == 'pagestat') {
$data_stats['runRatio'][] = ($data['loadCnt'] == 0) ? 0 : $data['runCnt'] / $data['loadCnt'] * 1;
}
// Добавляем поля для метрики minstat:
if ($metric == 'minstat') {
$data_stats['cpm'][] = ($data['sspViewsCnt'] == 0) ? 0 : $data['sspMoney'] / $data['sspViewsCnt'] * 1000;
$data_stats['siteCpm'][] = ($data['sspViewsCnt'] == 0) ? 0 : $data['sspSiteMoney'] / $data['sspViewsCnt'] * 1000;
$data_stats['systemCpm'][] = ($data['sspViewsCnt'] == 0) ? 0 : ($data['sspMoney'] - $data['sspSiteMoney']) / $data['sspViewsCnt'] * 1000;
$data_stats['ctr'][] = ($data['sspViewsCnt'] == 0) ? 0 : $data['sspClicksCnt'] / $data['sspViewsCnt'] * 1;
$data_stats['cpc'][] = ($data['sspClicksCnt'] == 0) ? 0 : $data['sspMoney'] / $data['sspClicksCnt'] * 100;
$data_stats['siteCpc'][] = ($data['sspClicksCnt'] == 0) ? 0 : $data['sspSiteMoney'] / $data['sspClicksCnt'] * 100;
$data_stats['systemCpc'][] = ($data['sspClicksCnt'] == 0) ? 0 : ($data['sspMoney'] - $data['sspSiteMoney']) / $data['sspClicksCnt'] * 100;
$data_stats['sspSystemMoney'][] = ($data['sspMoney'] - $data['sspSiteMoney'])/$min_koef;
//$data_stats['sspMoneyAll'][] = ($data['sspMoney'] + $data['sspSiteMoney'])/$min_koef;
$data_stats['sumRatio'][] = ($data['sspMoney'] == 0) ? 0 : $data['sspMoney'] / $data['sspMoney'] * 1;
$data_stats['siteRatio'][] = ($data['sspMoney'] == 0) ? 0 : $data['sspSiteMoney'] / $data['sspMoney'] * 1;
$data_stats['systemRatio'][] = ($data['sspMoney'] == 0) ? 0 : ($data['sspMoney'] - $data['sspSiteMoney']) / $data['sspMoney'] * 1;
}
// Добавляем поля для метрики ndspstat:
if ($metric == 'ndspstat') {
$data_stats['cpm'][] = ($data['adViewsCnt'] == 0) ? 0 : $data['adMoney'] / $data['adViewsCnt'] * 1000;
$data_stats['ctr'][] = ($data['adViewsCnt'] == 0) ? 0 : $data['adClicksCnt'] / $data['adViewsCnt'] * 1;
$data_stats['cpc'][] = ($data['adClicksCnt'] == 0) ? 0 : $data['adMoney'] / $data['adClicksCnt'] * 100;
}
// Добавляем поля для метрики blockstat:
if ($metric == 'blockstat') {
//$data_stats['sum'][] = $data['blockViewsCnt'] + $data['sspViewsCnt'];
//$data_stats['ctr'][] = ($data['blockViewsCnt'] == 0) ? 0 : $data['blockClicksCnt'] / $data['blockViewsCnt'] * 1;
$data_stats['sumViews'][] = ($data['blockViewsCnt'] + $data['sspViewsCnt'])/$min_koef;
$data_stats['sumClicks'][] = ($data['blockClicksCnt'] + $data['sspClicksCnt'])/$min_koef;
$data_stats['ctr'][] = ($data['blockViewsCnt'] == 0) ? 0 : $data['blockClicksCnt'] / $data['blockViewsCnt'] * 1;
$data_stats['ctrRtb'][] = ($data['sspViewsCnt'] == 0) ? 0 : $data['sspClicksCnt'] / $data['sspViewsCnt'] * 1;
}
} }
// Логика формирования данных по временному интервалу:
if (false) {
if ($timeDiff == 0) // Одни сутки if ($timeDiff == 0) // Одни сутки
{ {
$dataStats['type'] = 'day'; $dataStats['type'] = 'day';
...@@ -558,11 +154,16 @@ class Statistics ...@@ -558,11 +154,16 @@ class Statistics
AddDataStats($dataStats, $value_day, $metric, $dataStats['type']); AddDataStats($dataStats, $value_day, $metric, $dataStats['type']);
} }
} }
}
$dataStats['type'] = 'interval';
foreach ($stats['data']['Day'] as $day=>$value_day) {
$period[] = $day;
AddDataStats($dataStats, $value_day, $dataStats['type']);
} }
$dataStats['period'] = $period; $dataStats['period'] = $period;
$dataStats['metric'] = $metric; $dataStats['report'] = $report_type;
$stats = $dataStats; $stats = $dataStats;
return $stats; return $stats;
...@@ -574,6 +175,7 @@ class Statistics ...@@ -574,6 +175,7 @@ class Statistics
// Запрос к API: // Запрос к API:
private function apiRequest($data) private function apiRequest($data)
{ {
//return $data;
$playload = json_encode($data); $playload = json_encode($data);
$url = 'http://stat.instraroam.net/json/'.md5($playload . $this->hashSolt); $url = 'http://stat.instraroam.net/json/'.md5($playload . $this->hashSolt);
......
...@@ -55,7 +55,7 @@ $src = $sxml['src']; ...@@ -55,7 +55,7 @@ $src = $sxml['src'];
$error = $this->error; $error = $this->error;
$periodStats = $this->periodStats; $periodStats = $this->periodStats;
$campaignStats = $this->campaignStats; //$campaignStats = $this->campaignStats;
$current_period = $this->current_period; $current_period = $this->current_period;
$dates = $this->dates; $dates = $this->dates;
$cats = $this->cats; $cats = $this->cats;
...@@ -152,7 +152,7 @@ $system_link = $this->url('adm.system.actions'); ...@@ -152,7 +152,7 @@ $system_link = $this->url('adm.system.actions');
<div id="chart-graph-stat" style="height: 370px;" data-colors=<?= ($colors_active_lines ? json_encode($colors_active_lines) : '')?>></div> <div id="chart-graph-stat" style="height: 370px;" data-colors=<?= ($colors_active_lines ? json_encode($colors_active_lines) : '')?>></div>
<?php endif ?> <?php endif ?>
<?php print_r($stat); ?> <?php // print_r($periodStats); ?>
<?php /* Таблица */ ?> <?php /* Таблица */ ?>
<div id="table-stat" class="b-table_wrapp"> <div id="table-stat" class="b-table_wrapp">
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment