Authored by 周蓉君

解决多线程采集事件、错误和性能时引起的崩溃。Review by 枪兵。

... ... @@ -94,15 +94,15 @@ typedef NS_ENUM(NSInteger, YHLogStrategy) {
*/
@property (strong, nonatomic, readonly) NSString *session;
/**
* 发送的事件
*/
@property (strong, nonatomic, readonly) YHEvent *event;
/**
* 发送的错误
*/
@property (strong, nonatomic, readonly) YHError *error;
///**
// * 发送的事件
// */
//@property (strong, nonatomic, readonly) YHEvent *event;
//
///**
// * 发送的错误
// */
//@property (strong, nonatomic, readonly) YHError *error;
/**
* 是否启用异常日志收集
... ...
... ... @@ -48,21 +48,14 @@
* 间隔发送时间
*/
@property (assign, nonatomic) NSTimeInterval currentInterval;
/**
* 最近一个事件
*/
@property (strong, nonatomic) YHEvent *event;
/**
* 最近一个错误
*/
@property (strong, nonatomic) YHError *error;
/**
@brief 最近一个Performance信息
@since 1.0
*/
@property (strong, nonatomic) YHPerformance *perfermance;
///**
// * 最近一个事件
// */
//@property (strong, nonatomic) YHEvent *event;
///**
// * 最近一个错误
// */
//@property (strong, nonatomic) YHError *error;
- (NSString *)timestamp;
... ... @@ -127,8 +120,8 @@
self.timer = nil;
}
[[NSNotificationCenter defaultCenter] removeObserver:self];
self.event = nil;
self.error = nil;
// self.event = nil;
// self.error = nil;
}
#pragma mark - Properties
... ... @@ -270,21 +263,21 @@
- (void)logEvent:(NSString *)eventId parameters:(NSDictionary *)param
{
YALog(@"logEvent %@, %@", eventId, param);
self.event = [[YHEvent alloc] init];
self.event.op = eventId;
self.event.uid = self.uid ? self.uid : @"";
self.event.ts = [self timestamp];
self.event.sid = self.session;
YHEvent *event = [[YHEvent alloc] init];
event.op = eventId;
event.uid = self.uid ? self.uid : @"";
event.ts = [self timestamp];
event.sid = self.session;
self.eventIndex++;
self.event.index = [NSString stringWithFormat:@"%lu", (unsigned long)self.eventIndex];
self.event.param = param;
self.event.cid = self.cid?:@"";
event.index = [NSString stringWithFormat:@"%lu", (unsigned long)self.eventIndex];
event.param = param;
event.cid = self.cid?:@"";
// 立即发送策略
if ((self.logStrategy & LogStrategyImmedi) != 0) {
[[YHAssemblyAssistant sharedInstance] uploadImmedilyWithEvent:self.event];
[[YHAssemblyAssistant sharedInstance] uploadImmedilyWithEvent:event];
} else {
[[YHAssemblyAssistant sharedInstance] saveItemData:self.event];
[[YHAssemblyAssistant sharedInstance] saveItemData:event];
}
... ... @@ -295,19 +288,19 @@
{
YALog(@"logError %@, %@", errorType, param);
self.error = [[YHError alloc] init];
self.error.et = errorType;
self.error.uid = self.uid ? self.uid : @"";
self.error.ts = [self timestamp];
self.error.sid = self.session;
self.error.param = param;
self.error.cid = self.cid?:@"";
YHError *error = [[YHError alloc] init];
error.et = errorType;
error.uid = self.uid ? self.uid : @"";
error.ts = [self timestamp];
error.sid = self.session;
error.param = param;
error.cid = self.cid?:@"";
// crash 不支持立即发送
if ((self.logStrategy & LogStrategyImmedi) != 0 && ![errorType isEqualToString:kErrorTypeCrash]) {
[[YHAssemblyAssistant sharedInstance] uploadImmedilyWithEvent:self.error];
[[YHAssemblyAssistant sharedInstance] uploadImmedilyWithEvent:error];
} else {
[[YHAssemblyAssistant sharedInstance] saveItemData:self.error];
[[YHAssemblyAssistant sharedInstance] saveItemData:error];
}
}
... ... @@ -316,13 +309,13 @@
{
YALog(@"perfType %@, %@", perfType, param);
self.perfermance = [[YHPerformance alloc] init];
self.perfermance.type = perfType;
self.perfermance.uid = self.uid ? self.uid : @"";
self.perfermance.ts = [self timestamp];
self.perfermance.sid = self.session;
self.perfermance.param = param;
self.perfermance.cid = self.cid?:@"";
YHPerformance *perfermance = [[YHPerformance alloc] init];
perfermance.type = perfType;
perfermance.uid = self.uid ? self.uid : @"";
perfermance.ts = [self timestamp];
perfermance.sid = self.session;
perfermance.param = param;
perfermance.cid = self.cid?:@"";
// 立即发送策略
// if ((self.logStrategy & LogStrategyImmedi) != 0) {
// [[YHAssemblyAssistant sharedInstance] uploadImmedilyWithEvent:self.perfermance];
... ... @@ -331,7 +324,7 @@
// }
// 性能统计事件不需要立即发送
[[YHAssemblyAssistant sharedInstance]savePerformanceData:self.perfermance];
[[YHAssemblyAssistant sharedInstance]savePerformanceData:perfermance];
}
// 首次安装的首次启动时发送
... ...
... ... @@ -177,17 +177,17 @@
NSLog(@"%@ end", self.name);
}
- (void)testPrepareImmediUploadDicWithNetworkReachabilityStatus {
NSLog(@"%@ start", self.name);
OCMExpect([networkMock setReachabilityStatusChangeBlock:[OCMArg any]]);
// [assembly prepareImmediUploadDic:@"appId" sessionId:@"sessionId"];
OCMVerifyAll(networkMock);
NSLog(@"%@ end", self.name);
}
//- (void)testPrepareImmediUploadDicWithNetworkReachabilityStatus {
// NSLog(@"%@ start", self.name);
//
// OCMExpect([networkMock setReachabilityStatusChangeBlock:[OCMArg any]]);
//
//// [assembly prepareImmediUploadDic:@"appId" sessionId:@"sessionId"];
//
// OCMVerifyAll(networkMock);
//
// NSLog(@"%@ end", self.name);
//}
- (void)testPrepareImmediUploadDicWithLocationServiceSuccess {
NSLog(@"%@ start", self.name);
... ...
... ... @@ -79,7 +79,7 @@
[analytics startWithAppId:@"appId"];
OCMVerify(ClassMethod([crashReporterMock sharedInstance]));
// OCMVerify(ClassMethod([crashReporterMock sharedInstance]));
OCMVerifyAll(assemblyAssistantMock);
NSLog(@"%@ end", self.name);
... ... @@ -137,8 +137,8 @@
[analytics logEvent:eventId parameters:param];
XCTAssertEqual(analytics.event.op, eventId);
XCTAssertEqual(analytics.event.param, param);
// XCTAssertEqual(analytics.event.op, eventId);
// XCTAssertEqual(analytics.event.param, param);
NSLog(@"%@ end", self.name);
}
... ... @@ -194,8 +194,8 @@
[analytics logError:errorId parameters:param];
XCTAssertEqual(analytics.error.et, errorId);
XCTAssertEqual(analytics.error.param, param);
// XCTAssertEqual(analytics.error.et, errorId);
// XCTAssertEqual(analytics.error.param, param);
NSLog(@"%@ end", self.name);
}
... ...
... ... @@ -118,24 +118,4 @@
NSLog(@"%@ end", self.name);
}
- (void)testEvent {
NSLog(@"%@ start", self.name);
[[mock expect] event];
[mock event];
[mock verify];
NSLog(@"%@ end", self.name);
}
- (void)testError {
NSLog(@"%@ start", self.name);
[[mock expect] error];
[mock error];
[mock verify];
NSLog(@"%@ end", self.name);
}
@end
... ...