librato-iOS
librato-iOS
通过 CocoaPods 集成您的 iOS 应用,使将指标报告给 Librato 变得非常简单。报告是异步进行的,设计用来不会妨碍到您,同时如果您需要的话,您可以深入了解每个指标的具体细节。
当网络不可用时,指标将被自动缓存,并且如果应用在提交之前关闭,它们也会被保存。请勿担心提交指标,我们确保在将指标传递给 Librato 的服务之前它们不会丢失。
目前支持 iOS 版本 8 及以上,并使用优秀的 AFNetworking 2 处理网络任务。
如果您需要支持 iOS 7,可以使用使用 AFNetworking 1.x 的 1.1.0
版本。
快速入门
使用 CocoaPods 在您的 workspace 中安装 librato-iOS
后,只需使用您的凭据创建一个 Librato 实例,然后开始添加指标。
#import "Librato.h"
// The prefix is optional but recommended as it
// helps you organize across your different projects
Librato *librato = [Librato.alloc initWithEmail:@"[email protected]"
apiKey:@"abc123..."
prefix:@""];
// Create a metric with a specific name and value
LibratoMetric *filesOpened = [LibratoMetric metricNamed:@"files.opened" valued:@42];
// Add it to the queue to be automatically submitted
[librato add:filesOpened];
安装
在您的 Podfile
中添加以下内容:
pod 'librato-iOS'
然后运行 pod install
。
配置
配置Libratro实例的电子邮件和令牌是实施者的工作,但始终将那些值保留在代码之外是一个好主意。
建议的方法
- 从包含项目凭据的文件中进行编译时替换(即,在源代码控制之外)
- 从plist中解密值
- 选择自己的冒险!
自定义度量
目前有两种测量类型:计数和分组。这些充当单个和聚合信息点。
计数器
这是默认的指标类型,只需要一个NSString名称和一个NSNumber值。
LibratoMetric *metric = [LibratoMetric metricNamed:@"downloads" valued:@42];
此外,您可以提供可选的source
和measureTime
。当审查数据以确定具有相同名称的测量来源时,source
很有用。如果未提供,则自动生成measureTime
,但您可以为过去发生的事件设置唯一的时间。指标必须标记为在过去一年内发生。
注意:两个name
和source
都应少于255个字符,并且由“A-Za-z0-9.:-_”组成。这些值将自动清理,并将任何无效字符替换为连字符。
这些值可以提供在options
NSDictionary中或在实际创建对象后在明确声明。
NSDate *previousDay = [NSDate.date dateByAddingTimeInterval:-(3600 * 24)];
LibratoMetric *metric = [LibratoMetric metricNamed:@"downloads"
valued:@42
options:@{
@"source": @"the internet",
@"measureTime": previousDay
}];
// or...
LibratoMetric *metric = [LibratoMetric metricNamed:@"downloads" valued:@42];
metric.source = @"the internet";
metric.measureTime = previousDay;
可以创建一个或多个计数器,并在添加时通过NSDictionary内联创建。
[<some librato instance> add:@{
@"downloads": @13,
@"plutonium": @{
@"value": @238,
@"source": @"Russia, with love"
}
}];
分组
组是多个相关且有意义的关联数据点的聚合指标。这些通过一个计数器指标数组创建。
LibratoMetric *bagelMetric1 = [LibratoMetric metricNamed:@"bagels" valued:@13];
LibratoMetric *bagelMetric2 = [LibratoMetric metricNamed:@"bagels" valued:@10];
LibratoMetric *bagelMetric3 = [LibratoMetric metricNamed:@"bagels" valued:@9];
LibratoMetric *bagelMetric4 = [LibratoMetric metricNamed:@"bagels" valued:@8];
LibratoMetric *bagelMetric5 = [LibratoMetric metricNamed:@"bagels" valued:@2];
LibratoMetric *bagelMetric6 = [LibratoMetric metricNamed:@"bagels" valued:@1];
LibratoMetric *bagelMetric7 = [LibratoMetric metricNamed:@"bagels" valued:@0];
LibratoMetric *bagelMetric8 = [LibratoMetric metricNamed:@"bagels" valued:@0];
NSArray *bagels = @[bagelMetric1, bagelMetric2, bagelMetric3, bagelMetric4, bagelMetric5, bagelMetric6, bagelMetric7, bagelMetric8];
LibratoGaugeMetric *bagelGuage = [LibratoGaugeMetric metricNamed:@"bagel_guage" measurements:bagels];
LibratoGroupMetric
自动生成具有总和、最小值、最大值和平方值的聚合数据,以便在报告工具中使用。
提交
通常不需要手动提交指标。默认情况下,如果网络连接可用,librato-iOS
将会每五秒钟自动提交已添加到队列中的所有内容。
使用 autosubmitInterval
选项在初始化 LibratoQueue
实例时配置提交触发频率。
这个间隔可以调整为任何 NSTimeInterval
测量值,但 librato-iOS
将仅在每秒运行一次检查以避免自动化洪水。
手动提交
如果您想将指标添加到队列并触发立即提交,可以使用 submit:
方法。此方法接受指标或 nil
值。
// Adding metrics and immediately triggering a submission
[<some librato-iOS instance> submit:metrics];
// Passing nil will simply trigger the submission
[<some librato-iOS instance> submit:nil];
自定义前缀
您可以设置一个可选但强烈推荐的场景前缀,它将自动添加到所有指标名称中。这是一种隔离数据或快速过滤指标的好方法。
提交成功或失败
您可以为指标提交成功和失败情况设置代码块。这些代码块在提交回调时被引用,因此随机设置或 nil
这些代码块可能会导致意外结果。
Librato *librato = [Librato.alloc initWithEmail:@"[email protected]"
apiKey:@"abc123..."
prefix:@""];
[libratoInstance setSubmitSuccessBlock:^(NSDictionary *JSON, NSUInteger code) {
if (code == 200) {
NSLog(@"Successful submission. Response JSON is: %@", JSON);
}
}];
[libratoInstance setSubmitFailureBlock:^(NSError *error, NSDictionary *JSON) {
NSLog(@"Error submitting metric: %@", error);
}];
[libratoInstance add:[LibratoMetric metricNamed:@"callbacks.test" valued:@123]];
如果您想禁用代码块,只需将它们设置为 nil
。
[libratoInstance setSubmitSuccessBlock:nil];
[libratoInstance setSubmitFailureBlock:nil];
离线指标收集
如果设备失去网络可用性,所有新的指标都将缓存,直到网络(WiFi或蜂窝数据)再次可用。
离线状态下,每个指标都会存储在应用内存中。如果您担心内存消耗,您可能希望配置您的应用程序以减少收集的指标数量或在收集一定量的指标后关闭测量。指标本身非常小,因此这仅在没有脏分分钟内收集大量指标且将长时间离线的情况下才是一个问题。
持久化指标
如果应用程序在离线状态下缓存指标,然后关闭,所有缓存的指标都存储在NSKeyedArchiver
中。此存档将在下一次打开应用程序时清空到队列中。对于此目的而言,NSKeyedArchiver
非常出色,但它不支持查询数据,这意味着所有归档的指标都是盲目提交的,不管其类型或数据。
贡献
- 查看最新的主分支以确保该功能尚未实现或错误尚未修复。
- 查看问题跟踪器以确保没有人已经提出或提供此请求。
- 从功能或错误修复分支叉取项目并提交拉取请求。
- 请包括测试。这很重要,这样我们就可以在未来版本中无意中破坏您的更改。
- 请勿修改podspec,版本或变更日志。如果您更改这些文件,请创建一个单独的提交,以便我们可以围绕它进行 cherry-pick。
贡献者
版权
版权所有(c)2013 Amco International Education Services, LLC。有关更多详细信息,请参阅LICENSE。