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

parent f1e25e72
......@@ -18,6 +18,11 @@ return [
'transactions' => '#1F77B4',
'salemoney' => '#FF7F0E',
'admoney' => '#9467BD',
'Views' => '#2CA02C',
'Clicks' => '#D62728',
'Orders' => '#1F77B4',
'OrderSum' => '#FF7F0E',
'AdMoney' => '#9467BD',
]
]
];
......@@ -7,6 +7,7 @@ $(document).ready(function(){
//selectorActiveDays = '.b-filter__switch.days .m-filter__switch-item_active',
//selectorActiveData = '.b-filter__switch.metric-data .m-filter__switch-item_active',
activeLine = $(selectorActiveLine).data('filter-category'),
activeLines,
//activeTime,
activeDays,
toggelDates = [],
......@@ -92,11 +93,14 @@ $(document).ready(function(){
$.extend({
ChartStat: {
DateStat: function(dataLineChartStat) {
console.log('AAA DateStat: ', dataLineChartStat);
var activeLines = ['shows', 'clicks', 'transactions', 'salemoney', 'admoney'];
activeLine = 'shows';
//console.log('AAA DateStat: ', dataLineChartStat);
//activeLines = ['shows', 'clicks', 'transactions', 'salemoney', 'admoney'];
//activeLine = 'shows';
if (dataLineChartStat.report == 'common') {
activeLines = ['Views', 'Clicks', 'Orders', 'OrderSum', 'AdMoney'];
activeLine = 'Views';
}
// Диапазон дат:
if (dataLineChartStat.type == 'interval') {
......
......@@ -47,7 +47,7 @@ $(document).ready(function(){
$chartStatError = $('.chart-graph-stat-error'),
$chartStatErrorMessage = $('.chart-graph-stat-error .message'),
periodStatsData,
campaignStatsData,
//campaignStatsData,
dataLineChartStat;
......@@ -61,9 +61,11 @@ $(document).ready(function(){
if ($('#period-stats').val()) {
periodStatsData = JSON.parse($('#period-stats').val());
}
/*
if ($('#campaign-stats').val()) {
campaignStatsData = JSON.parse($('#campaign-stats').val());
}
*/
// Устанавливаем данные по периоду в качестве стартовых:
dataLineChartStat = periodStatsData;
//console.log('AAA dataLineChartStat = ', dataLineChartStat);
......@@ -143,7 +145,8 @@ $(document).ready(function(){
$this.addClass('selected').toggleClass('desc');
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'));
}
renderHourTable();
......@@ -197,8 +200,9 @@ $(document).ready(function(){
//console.log("AAA requestDataStat SUCCESS res: ", res);
ShowChartData();
periodStatsData = res.period;
campaignStatsData = res.campaign;
//periodStatsData = res.period;
//campaignStatsData = res.campaign;
periodStatsData = res;
dataLineChartStat = periodStatsData;
$('.main-cat').removeClass('selected');
$('.main-cat.date').addClass('selected');
......
......@@ -109,12 +109,20 @@ class Cabinet extends Common
switch ($report_type) {
case 'common':
/** @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();
$periodStats = $statsDaysModel->getStatsByDate($feed_id_list, $dates);
$stat = $stats->getStatData($metric, $type);
//$campaignStats = $statsDaysModel->getStatsByFeeds($feed_id_list, $dates);
//$periodStats = $statsDaysModel->getStatsByDate($feed_id_list, $dates);
$periodStats = $stats->getStatData($report_type, $feed_id_list, $dates);
$cats = [
'Views' => 'Показы',
'Clicks' => 'Клики',
'Orders' => 'Заказы',
'OrderSum' => 'Сумма по заказам',
'AdMoney' => 'Стоимость заказа'
];
/*
$cats = [
'shows' => 'Показы',
'clicks' => 'Клики',
......@@ -123,7 +131,7 @@ class Cabinet extends Common
'admoney' => 'admoney'
];
/*
$campaignStats = $statsDaysModel->getStatsByFeeds($feed_id_list, $dates);
if ($campaignStats || count($campaignStats['period'])>0) {
$feeds_names = [];
foreach($campaignStats['period'] as $feed_id) {
......@@ -159,21 +167,20 @@ class Cabinet extends Common
break;
}
//return new JsonResponse($companyStats);
/*
$periodStats['type'] = 'interval';
$periodStats['report'] = $report_type;
$campaignStats['type'] = 'interval';
$campaignStats['report'] = $report_type;
$data['campaignStats'] = $campaignStats;
*/
$data['feeds'] = $feeds;
$data['report'] = $report_type;
$data['current_period'] = $current_period;
$data['dates'] = $dates;
$data['stat'] = $stat;
$data['periodStats'] = $periodStats;
//$data['campaignStats'] = $campaignStats;
$data['cats'] = $cats;
$data['periods_list'] = $this->container->get('config')['feed_conf']['periods_list'];
$data['colors_active_lines'] = $this->container->get('config')['feed_conf']['colors_active_lines'];
......@@ -187,50 +194,6 @@ class Cabinet extends Common
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) {
$data['error'] = _t('Извините, статистика временно не работает');
}
......@@ -251,6 +214,9 @@ class Cabinet extends Common
$auth = $this->container->get(UserService::class);
$userId = $auth->getIdentity()->getId();
/** @var \App\Model\Statistics $stats */
$stats = $this->container->get(Statistics::class);
// Выводим стр. по фидам, если за пользователем закреплен фид:
/** @var \App\Model\Feeds $feedsModel */
$feedsModel = $this->container->get(Feeds::class);
......@@ -272,8 +238,10 @@ class Cabinet extends Common
switch ($report_type) {
case 'common':
/** @var \App\Model\Feeds $statDaysModel */
$statsDaysModel = $this->container->get(StatsDays::class);
$periodStats = $statsDaysModel->getStatsByDate($feed_id_list, $dates);
//$statsDaysModel = $this->container->get(StatsDays::class);
//$periodStats = $statsDaysModel->getStatsByDate($feed_id_list, $dates);
$periodStats = $stats->getStatData($report_type, $feed_id_list, $dates);
/*
$campaignStats = $statsDaysModel->getStatsByFeeds($feed_id_list, $dates);
if ($campaignStats || count($campaignStats['period'])>0) {
......@@ -284,7 +252,7 @@ class Cabinet extends Common
}
$campaignStats['period'] = $feeds_names;
}
*/
break;
case 'transaction':
/** @var \App\Model\Feeds $transactionsModel */
......@@ -311,6 +279,7 @@ class Cabinet extends Common
return new JsonResponse(null);
}
/*
$periodStats['type'] = 'interval';
$periodStats['report'] = $report_type;
......@@ -325,6 +294,10 @@ class Cabinet extends Common
} else {
$data = null;
}
*/
$data = $periodStats;
return new JsonResponse($data);
}
......
......@@ -20,100 +20,31 @@ class Statistics
// Данные по метрикам
public function getStatData($metric, $type)
public function getStatData($report_type, $feed_id_list, $dates)
{
return 567;
$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) { // Диапазон дат или по сайтам, зонам странам
$type = 'feed_stat';
$fields = ['Views','Clicks','Orders','OrderSum'];
$dates = array(
'group' => $dates_group,
'group' => 'Day',
//'start' => '2019-01-01',
//'end' => '2019-01-16',
'start' => $dates[0],
'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(
'method' => "reports",
'data' => array(
'type' => $type,
'filters' => array(
'FeedID' => array('values' => $feed_id_list),
),
'fields' => $fields,
'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;
$stats = $this->apiRequest($dataRequest);
......@@ -130,355 +61,20 @@ class Statistics
$dataStats = 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)
{
// Провайдеры, данные для которых есть за текущий временной интервал:
$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)
function AddDataStats(&$data_stats, $data, $date_type)
{
$min_koef = ($date_type == 'interval') ? 1 : 5;
foreach ($data as $cat=>$value) {
$data_stats[$cat][] = $value/$min_koef;
}
// Добавляем поля для метрики pagestat:
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;
}
// Временно:
$data_stats['AdMoney'][] = 2240 + $data['Orders'];
}
// Логика формирования данных по временному интервалу:
if (false) {
if ($timeDiff == 0) // Одни сутки
{
$dataStats['type'] = 'day';
......@@ -558,11 +154,16 @@ class Statistics
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['metric'] = $metric;
$dataStats['report'] = $report_type;
$stats = $dataStats;
return $stats;
......@@ -574,6 +175,7 @@ class Statistics
// Запрос к API:
private function apiRequest($data)
{
//return $data;
$playload = json_encode($data);
$url = 'http://stat.instraroam.net/json/'.md5($playload . $this->hashSolt);
......
......@@ -55,7 +55,7 @@ $src = $sxml['src'];
$error = $this->error;
$periodStats = $this->periodStats;
$campaignStats = $this->campaignStats;
//$campaignStats = $this->campaignStats;
$current_period = $this->current_period;
$dates = $this->dates;
$cats = $this->cats;
......@@ -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>
<?php endif ?>
<?php print_r($stat); ?>
<?php // print_r($periodStats); ?>
<?php /* Таблица */ ?>
<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