Project Name | Stars | Downloads | Repos Using This | Packages Using This | Most Recent Commit | Total Releases | Latest Release | Open Issues | License | Language |
---|---|---|---|---|---|---|---|---|---|---|
Formio.js | 1,569 | 104 | 95 | 2 days ago | 1,058 | July 15, 2022 | 736 | mit | JavaScript | |
JavaScript powered Forms with JSON Form Builder | ||||||||||
Low Latency Android Ios Linux Windows Tvos Macos Interactive Audio Platform | 1,246 | 3 months ago | 4 | C++ | ||||||
🇸Superpowered Audio, Networking and Cryptographics SDKs. High performance and cross platform on Android, iOS, macOS, tvOS, Linux, Windows and modern web browsers. | ||||||||||
Gankflutter | 475 | 3 years ago | 8 | Dart | ||||||
干货集中营 客户端 flutter版 | ||||||||||
Lemonjournal | 349 | 2 years ago | mit | JavaScript | ||||||
A WeChat mini program demo based on Wafer2 framework - 微信小程序Demo:柠檬手帐 - 图片编辑应用,支持图片和文字的移动、旋转、缩放、保存编辑状态并生成预览图 | ||||||||||
Sdk | 267 | 3 | 33 | 6 months ago | 7 | April 02, 2021 | 47 | apache-2.0 | Go | |
Library for using Grafana' structures in Go programs and client for Grafana REST API. | ||||||||||
Pinata Sdk | 240 | 3 | 61 | 3 months ago | 35 | November 08, 2022 | 30 | mit | JavaScript | |
Official SDK for the Pinata IPFS service | ||||||||||
Gotron Sdk | 189 | 11 | 4 days ago | 12 | April 09, 2021 | 5 | lgpl-3.0 | Go | ||
Tron SDK for golang / CLI tool with keystore manager | ||||||||||
Athena Express | 143 | 3 | a year ago | 52 | March 22, 2022 | 20 | mit | JavaScript | ||
Athena-Express can simplify executing SQL queries in Amazon Athena AND fetching cleaned-up JSON results in the same synchronous or asynchronous request - well suited for web applications. | ||||||||||
Cos Java Sdk V5 | 137 | 428 | 45 | 11 days ago | 135 | July 29, 2022 | 15 | mit | Java | |
java sdk for qcloud cos v5 (xml api) | ||||||||||
Flickr Sdk | 117 | 38 | 11 | 5 days ago | 29 | March 03, 2022 | 7 | mit | JavaScript | |
Almost certainly the best Flickr API client in the world for node and the browser |
Sensors Analytics 从 1.6 开始为用户开放自定义“数据预处理模块”,即为 SDK 等方式接入的数据(不包括批量导入工具方式)提供一个简单的 ETL 流程,使数据接入更加灵活。
可以使用“数据预处理模块”处理的数据来源包括:
使用 BatchImporter 和 HdfsImporter 批量导入数据的情况除外。
例如 SDK 发来一条数据,传入“数据预处理模块”时格式如下:
{
"distinct_id":"2b0a6f51a3cd6775",
"time":1434556935000,
"type":"track",
"event":"ViewProduct",
"project": "default",
"ip":"123.123.123.123",
"properties":{
"product_name":"苹果"
}
}
这时希望增加一个字段 product_classify
,表示产品的分类,可通过“数据预处理模块”将数据处理成:
{
"distinct_id":"2b0a6f51a3cd6775",
"time":1434556935000,
"type":"track",
"event":"ViewProduct",
"project": "default",
"properties":{
"product_name":"苹果",
"product_classify":"水果"
}
}
一个“数据预处理模块”需要自定义一个 Java 类实现 com.sensorsdata.analytics.extractor.processor.ExtProcessor
接口,该接口定义如下:
package com.sensorsdata.analytics.extractor.processor;
public interface ExtProcessor {
String process(String record) throws Exception;
}
ip
,值为接收数据时取到的客户端 IP;null
,表示抛弃这条数据;本 repo 提供了一个完整的“数据预处理模块”样例代码,用于实现“概述”中所描述的样例场景,定义接口文件:
实现自定义处理逻辑的类文件:
/data/sa_cluster/logs/extractor
(其中 /data
为数据盘挂载点,请根据实际情况替换) 下的 extractor.log
中,并且不支持自定义 log4j 配置。若必须将日志输出到指定位置,可直接在代码中 FileOutputStream
写文件或使用其他日志库;process
函数直接返回 null
即可;[
{
"distinct_id":"2b0a6f51a3cd6775",
"time":1434556935000,
"type":"track",
"event":"ViewProduct",
"project": "sample_project",
"properties":{
...
}
},
{
"distinct_id":"2b0a6f51a3cd6775",
"type":"profile_set",
"time":1434556935000,
"project": "sample_project",
"properties":{
"is_vip":true
}
}
]
property
不是每条数据都存在,如果不存在时取值并使用可能造成空指针异常,如果不在处理模块内部处理该异常直接抛出,将导致这条数据被抛弃;type
以 profile_
开头的数据,是没有 event
字段的,若用到 event
字段,请先判断字段是否存在;用于部署的“数据预处理模块”需要打成一个 JAR 包。
本 repo 附带的样例使用了 Jackson 库解析 JSON,并使用 Maven 做包管理,编译并打包本 repo 代码可通过:
git clone [email protected]:sensorsdata/ext-processor-sample.git
cd ext-processor-sample
mvn clean package
执行编译后可在 target
目录下找到 ext-processor-sample-0.1.jar
。
ext-processor-utils 是用于测试、部署“数据预处理模块”的工具,只能运行于部署 Sensors Analytics 的机器上。
将编译出的 JAR 文件上传到部署 Sensors Analytics 的机器上,例如 ext-processor-sample-0.1.jar
。
切换到 sa_cluster
账户:
sudo su - sa_cluster
直接运行 ext-processor-utils 将输出参数列表如:
~/sa/extractor/bin/ext-processor-utils
usage: [ext-processor-utils] [-c <arg>] [-h] [-j <arg>] -m <arg>
-c,--class <arg> 实现 ExtProcessor 的类名, 例如
cn.kbyte.CustomProcessor
-h,--help help
-j,--jar <arg> 包含 ExtProcessor 的 jar, 例如
custom-processor-0.1.jar
-m,--method <arg> 操作类型, 可选
test/run/install/uninstall/info/
run_with_real_time_data
test: 测试 jar 是否可加载;
run: 运行指定 class 类的 process 方法,
以标准输入的逐行数据作为参数输入, 将返回结果输出到标准输出;
run_with_real_time_data:
使用本机实时的数据作为输入, 将返回结果输出到标准输出;
install: 安装 ExtProcessor;
uninstall: 卸载 ExtProcessor;
info: 查看当前配置状态;
-t,--add_in_track_signup <arg> 是否将预处理应用于 track signup 的单独处理流中.
yes 表示,再打开 track signup
的处理流的前提下,会同时将预处理的内容也添加到 track
signup 流中, no 表示在 track signup
流中不进行预处理。
如果您的预处理会影响到 track_signup
的结果(例如,会修改 distinct_id 等),请打开此开关
--when_exception_use_original <arg> 当 ExtProcessor
抛异常时导入原始数据而不是直接抛弃, yes
表示预处理遇到异常时使用原始数据导入, no
表示遇到异常时抛弃该条数据
使用 test
方法测试 JAR 并加载 Class:
~/sa/extractor/bin/ext-processor-utils \
--jar ext-processor-sample-0.1.jar \
--class cn.sensorsdata.sample.SampleExtProcessor \
--method test
jar
: JAR 包路径;class
: 实现 com.sensorsdata.analytics.extractor.processor.ExtProcessor
的 Java 类;输出如下:
16/10/15 18:27:51 main INFO utils.ExtLibUtils: 加载 jar: /home/sa_cluster/ext-processor-sample-0.1.jar, class: cn.sensorsdata.sample.SampleExtProcessor 成功
使用 run
方法加载 JAR 并实例化 Class,以标准输入的逐行数据作为预处理函数输入,并将处理结果输出到标准输出:
~/sa/extractor/bin/ext-processor-utils \
--jar ext-processor-sample-0.1.jar \
--class cn.sensorsdata.sample.SampleExtProcessor \
--method run
使用 run_with_real_time_data
方法加载 JAR 并实例化 Class,以本机实际接收的数据作为预处理函数输入,并将输入和输出打印到标准输出:
~/sa/extractor/bin/ext-processor-utils \
--jar ext-processor-sample-0.1.jar \
--class cn.sensorsdata.sample.SampleExtProcessor \
--method run_with_real_time_data \
--add_in_track_signup yes \
--when_exception_use_original no
使用 ext-processor-utils 的 install
方法安装,例如安装样例执行如下命令:
~/sa/extractor/bin/ext-processor-utils \
--jar ext-processor-sample-0.1.jar \
--class cn.sensorsdata.sample.SampleExtProcessor \
--method install \
--add_in_track_signup yes \
--when_exception_use_original yes
安装好“数据预处理模块”后,为了验证处理结果是否符合预期,可以开启 SDK 的 Debug 模式
校验数据。
埋点
,在新页面中点击右上角 数据接入辅助工具
,在新页面中点击最上面导航栏中的 DEBUG数据查看
;Debug 模式
;执行命令输出导入模块的统计信息:
sa_admin status -m extractor
其中 extProcessorBottleneck 为当前数据预处理模块的性能瓶颈,其计算方法如下:
/** 初始化统计 **/
processUseTime = 0; // 用于统计执行预处理所用时间
processCount = 0; // 用于统计调用预处理次数
/** 每次预处理 **/
start = System.nanoTime(); // 记录执行预处理前的时间戳
record = serializeToJson(rawRecord); // 将数据序列化成 JSON 格式
extProcessor.process(record); // 调用预处理函数
processUseTime += System.nanoTime() - start; // 累加本次执行预处理消耗的时间到总和
++processCount; // 累加执行次数
/** 每 1 分钟计算上 1 分钟统计值,并清零计数 **/
// 得出每秒最多执行 process() 次数,即此处的性能瓶颈
extProcessorBottleneck = processCount * 1000000000L / processUseTime;
processUseTime = 0;
processCount = 0;
若不再需要“数据预处理模块”,可以通过 ext-processor-utils 的 uninstall
方法卸载,执行如下命令:
~/sa/extractor/bin/ext-processor-utils --method uninstall