Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/matomo-org/matomo.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'core/Metrics.php')
-rw-r--r--core/Metrics.php167
1 files changed, 167 insertions, 0 deletions
diff --git a/core/Metrics.php b/core/Metrics.php
new file mode 100644
index 0000000000..ca851d82e4
--- /dev/null
+++ b/core/Metrics.php
@@ -0,0 +1,167 @@
+<?php
+/**
+ * Piwik - Open source web analytics
+ *
+ * @link http://piwik.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ *
+ * @category Piwik
+ * @package Piwik
+ */
+
+/**
+ * This class holds the various mappings we use to internally store and manipulate metrics.
+ */
+class Piwik_Metrics
+{
+ /**
+ * When saving DataTables in the DB, we replace all columns name with these IDs. This saves many bytes,
+ * eg. INDEX_NB_UNIQ_VISITORS is an integer: 4 bytes, but 'nb_uniq_visitors' is 16 bytes at least
+ */
+ const INDEX_NB_UNIQ_VISITORS = 1;
+ const INDEX_NB_VISITS = 2;
+ const INDEX_NB_ACTIONS = 3;
+ const INDEX_MAX_ACTIONS = 4;
+ const INDEX_SUM_VISIT_LENGTH = 5;
+ const INDEX_BOUNCE_COUNT = 6;
+ const INDEX_NB_VISITS_CONVERTED = 7;
+ const INDEX_NB_CONVERSIONS = 8;
+ const INDEX_REVENUE = 9;
+ const INDEX_GOALS = 10;
+ const INDEX_SUM_DAILY_NB_UNIQ_VISITORS = 11;
+
+ // Specific to the Actions reports
+ const INDEX_PAGE_NB_HITS = 12;
+ const INDEX_PAGE_SUM_TIME_SPENT = 13;
+
+ const INDEX_PAGE_EXIT_NB_UNIQ_VISITORS = 14;
+ const INDEX_PAGE_EXIT_NB_VISITS = 15;
+ const INDEX_PAGE_EXIT_SUM_DAILY_NB_UNIQ_VISITORS = 16;
+
+ const INDEX_PAGE_ENTRY_NB_UNIQ_VISITORS = 17;
+ const INDEX_PAGE_ENTRY_SUM_DAILY_NB_UNIQ_VISITORS = 18;
+ const INDEX_PAGE_ENTRY_NB_VISITS = 19;
+ const INDEX_PAGE_ENTRY_NB_ACTIONS = 20;
+ const INDEX_PAGE_ENTRY_SUM_VISIT_LENGTH = 21;
+ const INDEX_PAGE_ENTRY_BOUNCE_COUNT = 22;
+
+ // Ecommerce Items reports
+ const INDEX_ECOMMERCE_ITEM_REVENUE = 23;
+ const INDEX_ECOMMERCE_ITEM_QUANTITY = 24;
+ const INDEX_ECOMMERCE_ITEM_PRICE = 25;
+ const INDEX_ECOMMERCE_ORDERS = 26;
+ const INDEX_ECOMMERCE_ITEM_PRICE_VIEWED = 27;
+
+ // Site Search
+ const INDEX_SITE_SEARCH_HAS_NO_RESULT = 28;
+ const INDEX_PAGE_IS_FOLLOWING_SITE_SEARCH_NB_HITS = 29;
+
+ // Performance Analytics
+ const INDEX_PAGE_SUM_TIME_GENERATION = 30;
+ const INDEX_PAGE_NB_HITS_WITH_TIME_GENERATION = 31;
+ const INDEX_PAGE_MIN_TIME_GENERATION = 32;
+ const INDEX_PAGE_MAX_TIME_GENERATION = 33;
+
+ // Goal reports
+ const INDEX_GOAL_NB_CONVERSIONS = 1;
+ const INDEX_GOAL_REVENUE = 2;
+ const INDEX_GOAL_NB_VISITS_CONVERTED = 3;
+
+ const INDEX_GOAL_ECOMMERCE_REVENUE_SUBTOTAL = 4;
+ const INDEX_GOAL_ECOMMERCE_REVENUE_TAX = 5;
+ const INDEX_GOAL_ECOMMERCE_REVENUE_SHIPPING = 6;
+ const INDEX_GOAL_ECOMMERCE_REVENUE_DISCOUNT = 7;
+ const INDEX_GOAL_ECOMMERCE_ITEMS = 8;
+
+ public static $mappingFromIdToName = array(
+ Piwik_Metrics::INDEX_NB_UNIQ_VISITORS => 'nb_uniq_visitors',
+ Piwik_Metrics::INDEX_NB_VISITS => 'nb_visits',
+ Piwik_Metrics::INDEX_NB_ACTIONS => 'nb_actions',
+ Piwik_Metrics::INDEX_MAX_ACTIONS => 'max_actions',
+ Piwik_Metrics::INDEX_SUM_VISIT_LENGTH => 'sum_visit_length',
+ Piwik_Metrics::INDEX_BOUNCE_COUNT => 'bounce_count',
+ Piwik_Metrics::INDEX_NB_VISITS_CONVERTED => 'nb_visits_converted',
+ Piwik_Metrics::INDEX_NB_CONVERSIONS => 'nb_conversions',
+ Piwik_Metrics::INDEX_REVENUE => 'revenue',
+ Piwik_Metrics::INDEX_GOALS => 'goals',
+ Piwik_Metrics::INDEX_SUM_DAILY_NB_UNIQ_VISITORS => 'sum_daily_nb_uniq_visitors',
+
+ // Actions metrics
+ Piwik_Metrics::INDEX_PAGE_NB_HITS => 'nb_hits',
+ Piwik_Metrics::INDEX_PAGE_SUM_TIME_SPENT => 'sum_time_spent',
+ Piwik_Metrics::INDEX_PAGE_SUM_TIME_GENERATION => 'sum_time_generation',
+ Piwik_Metrics::INDEX_PAGE_NB_HITS_WITH_TIME_GENERATION => 'nb_hits_with_time_generation',
+ Piwik_Metrics::INDEX_PAGE_MIN_TIME_GENERATION => 'min_time_generation',
+ Piwik_Metrics::INDEX_PAGE_MAX_TIME_GENERATION => 'max_time_generation',
+
+ Piwik_Metrics::INDEX_PAGE_EXIT_NB_UNIQ_VISITORS => 'exit_nb_uniq_visitors',
+ Piwik_Metrics::INDEX_PAGE_EXIT_NB_VISITS => 'exit_nb_visits',
+ Piwik_Metrics::INDEX_PAGE_EXIT_SUM_DAILY_NB_UNIQ_VISITORS => 'sum_daily_exit_nb_uniq_visitors',
+
+ Piwik_Metrics::INDEX_PAGE_ENTRY_NB_UNIQ_VISITORS => 'entry_nb_uniq_visitors',
+ Piwik_Metrics::INDEX_PAGE_ENTRY_SUM_DAILY_NB_UNIQ_VISITORS => 'sum_daily_entry_nb_uniq_visitors',
+ Piwik_Metrics::INDEX_PAGE_ENTRY_NB_VISITS => 'entry_nb_visits',
+ Piwik_Metrics::INDEX_PAGE_ENTRY_NB_ACTIONS => 'entry_nb_actions',
+ Piwik_Metrics::INDEX_PAGE_ENTRY_SUM_VISIT_LENGTH => 'entry_sum_visit_length',
+ Piwik_Metrics::INDEX_PAGE_ENTRY_BOUNCE_COUNT => 'entry_bounce_count',
+ Piwik_Metrics::INDEX_PAGE_IS_FOLLOWING_SITE_SEARCH_NB_HITS => 'nb_hits_following_search',
+
+ // Items reports metrics
+ Piwik_Metrics::INDEX_ECOMMERCE_ITEM_REVENUE => 'revenue',
+ Piwik_Metrics::INDEX_ECOMMERCE_ITEM_QUANTITY => 'quantity',
+ Piwik_Metrics::INDEX_ECOMMERCE_ITEM_PRICE => 'price',
+ Piwik_Metrics::INDEX_ECOMMERCE_ITEM_PRICE_VIEWED => 'price_viewed',
+ Piwik_Metrics::INDEX_ECOMMERCE_ORDERS => 'orders',
+ );
+
+ public static $mappingFromIdToNameGoal = array(
+ Piwik_Metrics::INDEX_GOAL_NB_CONVERSIONS => 'nb_conversions',
+ Piwik_Metrics::INDEX_GOAL_NB_VISITS_CONVERTED => 'nb_visits_converted',
+ Piwik_Metrics::INDEX_GOAL_REVENUE => 'revenue',
+ Piwik_Metrics::INDEX_GOAL_ECOMMERCE_REVENUE_SUBTOTAL => 'revenue_subtotal',
+ Piwik_Metrics::INDEX_GOAL_ECOMMERCE_REVENUE_TAX => 'revenue_tax',
+ Piwik_Metrics::INDEX_GOAL_ECOMMERCE_REVENUE_SHIPPING => 'revenue_shipping',
+ Piwik_Metrics::INDEX_GOAL_ECOMMERCE_REVENUE_DISCOUNT => 'revenue_discount',
+ Piwik_Metrics::INDEX_GOAL_ECOMMERCE_ITEMS => 'items',
+ );
+
+ protected static $metricsAggregatedFromLogs = array(
+ Piwik_Metrics::INDEX_NB_UNIQ_VISITORS,
+ Piwik_Metrics::INDEX_NB_VISITS,
+ Piwik_Metrics::INDEX_NB_ACTIONS,
+ Piwik_Metrics::INDEX_MAX_ACTIONS,
+ Piwik_Metrics::INDEX_SUM_VISIT_LENGTH,
+ Piwik_Metrics::INDEX_BOUNCE_COUNT,
+ Piwik_Metrics::INDEX_NB_VISITS_CONVERTED,
+ );
+
+ public static function getVisitsMetricNames()
+ {
+ $names = array();
+ foreach(self::$metricsAggregatedFromLogs as $metricId) {
+ $names[$metricId] = self::$mappingFromIdToName[$metricId];
+ }
+ return $names;
+ }
+
+ /* Used in DataTable Sort filter */
+ public static function getMappingFromIdToName()
+ {
+ $idToName = array_flip(self::$mappingFromIdToName);
+ return $idToName;
+ }
+ public static $mappingFromNameToId = array(
+ 'nb_uniq_visitors' => Piwik_Metrics::INDEX_NB_UNIQ_VISITORS,
+ 'nb_visits' => Piwik_Metrics::INDEX_NB_VISITS,
+ 'nb_actions' => Piwik_Metrics::INDEX_NB_ACTIONS,
+ 'max_actions' => Piwik_Metrics::INDEX_MAX_ACTIONS,
+ 'sum_visit_length' => Piwik_Metrics::INDEX_SUM_VISIT_LENGTH,
+ 'bounce_count' => Piwik_Metrics::INDEX_BOUNCE_COUNT,
+ 'nb_visits_converted' => Piwik_Metrics::INDEX_NB_VISITS_CONVERTED,
+ 'nb_conversions' => Piwik_Metrics::INDEX_NB_CONVERSIONS,
+ 'revenue' => Piwik_Metrics::INDEX_REVENUE,
+ 'goals' => Piwik_Metrics::INDEX_GOALS,
+ 'sum_daily_nb_uniq_visitors' => Piwik_Metrics::INDEX_SUM_DAILY_NB_UNIQ_VISITORS,
+ );
+
+} \ No newline at end of file