@(笔记)[piwik工作机制|帮助|翻译]
关于这篇向导 阅读这向导 你可能想对Piwik的工作进行概述,你想要为Piwik做贡献想要了解它的架构,如果你对web应用程序、服务器、HTTP、PHP等web技术有全面的了解。
Piwik的代码库是由 Piwik Core 它提供了应用程序的基础以及扩展点,Plugins,使用扩展点将行为和内容添加到应用程序中.插件不仅仅针对那些想要定制Piwik的第三方开发者:Piwik的大部分都是通过插件实现的。Piwik的核心是尽可能的小。
因此有两种插件
1.默认插件 提供Piwik的基本特征:它们包括在存储库和distribution
2.可选插件 可以手动安装(通过在插件/文件夹中复制)或通过Piwik在web界面中的市场
以下是Piwik的代码库的主要文件和文件夹:
config/
core/ # Piwik Core classes
lang/ # Translations
plugins/ # Plugin classes along with their assets
tests/
vendor/ # Libraries installed by Composer
console # Entry point for the CLI interface
index.php # Entry point for the web application and the HTTP reporting API
piwik.php # Entry point for the HTTP tracking API
piwik.js # JavaScript tracker to be included in websites
Piwik使用Composer将其依赖项(PHP库)安装到vendor/目录中。
web应用,
web应用程序的入口点是index.php,在根目录下。这个文件初始化所有东西,并调用FrontController类。
前端控制器将把传入的HTTP请求路由到基于URL参数的插件
/index.php?module=CoreHome&action=index&…
在本例中,前端控制器将调用CoreHome插件的控制器的动作索引。
插件控制器返回一个在HTTP响应中发送的视图(通常是HTML内容)。
Piwik的用户界面是基于HTML和JavaScript构建的。虽然有些页面是由PHP控制器提供的HTML文档(使用分支模板引擎构建),但是Piwik UI的某些部分是用AngularJS构建的。
AngularJS是一个前端JavaScript框架,这意味着用户界面是在客户端构建的,数据是从HTTP报告API(下一节中描述的)提取为JSON的。这也意味着更好的用户体验,因为它可以让Piwik开发人员构建更动态和更活跃的应用程序。
Piwik的长期路线图的一部分是将更多的Piwik的UI部分转移到AngularJS。
Read more about this in the“Working with Piwik’s UI” guide.
HTTP报告API与web应用程序类似。它的作用是提供机器可读格式(XML、JSON、…)的报告。
Piwik通过它提供了一个命令行API。./console该脚本使用Symfony控制台组件。 插件可以公开可以像这样调用的CLI命令:
./console visitorgenerator:generate-visits
命令类位于plugins/*/Commands中,并由Piwik自动检测。
请阅读“命令行中的Piwik”指南。
Piwik允许您收集分析数据,然后作为报告进行检索。让我们看看在中间和Piwik模型,过程和存储数据之间会发生什么
日志数据:原始数据分析数据
HTTP跟踪API(即Piwik跟踪器组件)接收到原始的分析数据,我们称之为“日志数据”。
日志数据在PHP中表示为Piwik\Tracker\Visit,并存储在以下表中:
- log_visit 每一次访问(返回的访问者)包含一个条目
- log_action 包含所有可能在网站上的行为(例如,独特的url,页面标题,下载网址。)
- log_link_visit_action 包含每个访问者的一个条目(页面视图,……)
- log_conversion 包含在访问期间发生的转换(与目标匹配的操作)
- log_conversion_item contains e-commerce conversion items
这些表是为了快速插入而设计和优化的,因为跟踪API需要尽可能快的速度来处理流量大的网站。
这些表的内容(及其相关的PHP实体)将在“Piwik数据库模式”指南中详细解释。
上面的表不是为提取高级报告而设计或优化的:当有大量数据时,将日志条目聚集到一天、一周或一个月会变得过于密集。
归档过程将读取日志数据并将其聚合为生成“归档数据”。数据被聚合并存储为每一个:
- day
- week
- month
- year
- custom date range
归档数据可以:
- numeric metrics(数字指标) :简单的数字值(如页面视图的数量) 这些存储在archive_numeric_*表中。值存储为浮点数。
- table records(表格档案、表记录) :双维度数据(可以是数字值以及其他任何东西),表示为Piwik\DataTable对象 。这些存储在archiveblob表中。可以将DataTable对象序列化为字符串,并将其压缩为表中的BLOB。存储在数据库中的DataTable对象被命名为记录,以区分它们与被操纵的数据表对象,并由Piwik的API返回。
每个数字度量或表记录都被处理并存储在每个聚合级别:日、周和月。例如,这意味着“入口页面”报告被处理并存储在每个月的每一天,以及每个星期、月、年和自定义日期范围。这样的数据是多余的,但这对于保证快速的性能是至关重要的。
由于归档数据必须快速查询,所以每个月都要在单独的表中进行分离。将会有:
- archive_numeric_2017_8 :会有2017年8月指标
- archive_blob_2017_9 :2017年9月报告
- …..
档案表的内容的详细解释“Piwik数据库模式”指南。存档过程中详细解释了“归档”指南
如上所示,数据被存储为数字指标或表记录。
报告是可DataTable对象,由插件定义的API类提供服务。API类访问持久化的指标或记录,并将它们转换为可发布的报告。
有时,一个持久化记录可以是多个API报告的来源。
您可以阅读有关报告如何创建和在“报告”指南中提供的更多细节
Piwik Core只定义了主要的流程和行为。插件可以通过几个扩展点来扩展和定制它们:
- 对事件进行注册,或触发事件
- 实施special classes 通过 piwik
- 扩展某些抽象基类
您可以在“Piwik的扩展点”指南中了解更多关于此主题的信息。