From a783e556c2a515605f775b3f13dd0cf38f0fc53b Mon Sep 17 00:00:00 2001 From: liubinpeng Date: Thu, 19 Nov 2020 20:13:52 +0800 Subject: [PATCH] docs: senstive words --- Chapter1 - iOS/1.75.md | 58 ++-- Chapter1 - iOS/1.80.md | 556 +++++++++++++++++++------------------- Chapter5 - Network/5.3.md | 8 +- 3 files changed, 311 insertions(+), 311 deletions(-) diff --git a/Chapter1 - iOS/1.75.md b/Chapter1 - iOS/1.75.md index dc7e6af..378858b 100644 --- a/Chapter1 - iOS/1.75.md +++ b/Chapter1 - iOS/1.75.md @@ -93,18 +93,18 @@ BDD 编写的测试用例针对的是行为,测试范围更大一些,适合 { XCTestExpectation *exception = [self expectationWithDescription:@"测试数据库插入功能"]; // given - [dbInstance removeAllLogsInTableType:PCTLogTableTypeMeta]; + [dbInstance removeAllLogsInTableType:HCTLogTableTypeMeta]; NSMutableArray *insertModels = [NSMutableArray array]; for (NSInteger index = 1; index <= 10000; index++) { - PCTLogMetaModel *model = [[PCTLogMetaModel alloc] init]; + HCTLogMetaModel *model = [[HCTLogMetaModel alloc] init]; model.log_id = index; // ... [insertModels addObject:model]; } // when - [dbInstance add:insertModels inTableType:PCTLogTableTypeMeta]; + [dbInstance add:insertModels inTableType:HCTLogTableTypeMeta]; // then - [dbInstance recordsCountInTableType:PCTLogTableTypeMeta completion:^(NSInteger count) { + [dbInstance recordsCountInTableType:HCTLogTableTypeMeta completion:^(NSInteger count) { XCTAssert(count == insertModels.count, @"「数据增加」功能:异常"); [exception fulfill]; }]; @@ -163,21 +163,21 @@ BDD 编写的测试用例针对的是行为,测试范围更大一些,适合 ```objective-c #import -#import "PCTLogPayloadModel.h" +#import "HCTLogPayloadModel.h" -@interface PCTLogPayloadModelTest : PCTTestCase +@interface HCTLogPayloadModelTest : HCTTestCase { - PCTLogPayloadModel *_sut; + HCTLogPayloadModel *_sut; } @end -@implementation PCTLogPayloadModelTest +@implementation HCTLogPayloadModelTest - (void)setUp { [super setUp]; - PCTLogPayloadModel *model = [[PCTLogPayloadModel alloc] init]; + HCTLogPayloadModel *model = [[HCTLogPayloadModel alloc] init]; model.log_id = 1; // ... _sut = model; @@ -195,7 +195,7 @@ BDD 编写的测试用例针对的是行为,测试范围更大一些,适合 XCTAssert([(NSString *)payloadDictionary[@"report_id"] isEqualToString:@"001"] && [payloadDictionary[@"size"] integerValue] == 102 && [(NSString *)payloadDictionary[@"meta"] containsString:@"meiying"], - @"PCTLogPayloadModel 的 「getDictionary」功能异常"); + @"HCTLogPayloadModel 的 「getDictionary」功能异常"); } @end @@ -614,12 +614,12 @@ Xcode 自带的测试系统是 `XCTest`,使用简单。开发步骤如下 1. XCTestCase 类和其他类一样,你可以定义基类,这里面封装一些常用的方法。 ``` - // PCTTestCase.h + // HCTTestCase.h #import NS_ASSUME_NONNULL_BEGIN - @interface PCTTestCase : XCTestCase + @interface HCTTestCase : XCTestCase @property (nonatomic, assign) NSTimeInterval networkTimeout; @@ -648,11 +648,11 @@ Xcode 自带的测试系统是 `XCTest`,使用简单。开发步骤如下 NS_ASSUME_NONNULL_END - // PCTTestCase.m - #import "PCTTestCase.h" + // HCTTestCase.m + #import "HCTTestCase.h" #import ... - @implementation PCTTestCase + @implementation HCTTestCase #pragma mark - life cycle @@ -718,20 +718,20 @@ Xcode 自带的测试系统是 `XCTest`,使用简单。开发步骤如下 **例子** -这里举个例子,是测试一个数据库操作类 `PCTDatabase`,代码只放某个方法的测试代码。 +这里举个例子,是测试一个数据库操作类 `HCTDatabase`,代码只放某个方法的测试代码。 ```objective-c - (void)testRemoveLatestRecordsByCount { XCTestExpectation *exception = [self expectationWithDescription:@"测试数据库删除最新数据功能"]; // 1. 先清空数据表 - [dbInstance removeAllLogsInTableType:PCTLogTableTypeMeta]; + [dbInstance removeAllLogsInTableType:HCTLogTableTypeMeta]; // 2. 再插入一批数据 NSMutableArray *insertModels = [NSMutableArray array]; NSMutableArray *reportIDS = [NSMutableArray array]; for (NSInteger index = 1; index <= 100; index++) { - PCTLogMetaModel *model = [[PCTLogMetaModel alloc] init]; + HCTLogMetaModel *model = [[HCTLogMetaModel alloc] init]; model.log_id = index; // ... if (index > 90 && index <= 100) { @@ -739,20 +739,20 @@ Xcode 自带的测试系统是 `XCTest`,使用简单。开发步骤如下 } [insertModels addObject:model]; } - [dbInstance add:insertModels inTableType:PCTLogTableTypeMeta]; + [dbInstance add:insertModels inTableType:HCTLogTableTypeMeta]; // 3. 将早期的数据删除掉(id > 90 && id <= 100) - [dbInstance removeLatestRecordsByCount:10 inTableType:PCTLogTableTypeMeta]; + [dbInstance removeLatestRecordsByCount:10 inTableType:HCTLogTableTypeMeta]; // 4. 拿到当前的前10条数据和之前存起来的前10条 id 做比较。再判断当前表中的总记录条数是否等于 90 - [dbInstance getLatestRecoreds:10 inTableType:PCTLogTableTypeMeta completion:^(NSArray * _Nonnull records) { - NSArray *latestRTentRecords = records; + [dbInstance getLatestRecoreds:10 inTableType:HCTLogTableTypeMeta completion:^(NSArray * _Nonnull records) { + NSArray *latestRTentRecords = records; - [dbInstance getOldestRecoreds:100 inTableType:PCTLogTableTypeMeta completion:^(NSArray * _Nonnull records) { - NSArray *currentRecords = records; + [dbInstance getOldestRecoreds:100 inTableType:HCTLogTableTypeMeta completion:^(NSArray * _Nonnull records) { + NSArray *currentRecords = records; __block BOOL isEarlyData = NO; - [latestRTentRecords enumerateObjectsUsingBlock:^(PCTLogModel * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { + [latestRTentRecords enumerateObjectsUsingBlock:^(HCTLogModel * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { if ([reportIDS containsObject:obj.report_id]) { isEarlyData = YES; } @@ -833,16 +833,16 @@ Kiwi 的使用分为:[Specs](https://github.com/kiwi-bdd/Kiwi/wiki/Specs)、 [ ``` XCTestExpectation *exception = [self expectationWithDescription:@"测试数据库插入功能"]; - [dbInstance removeAllLogsInTableType:PCTLogTableTypeMeta]; + [dbInstance removeAllLogsInTableType:HCTLogTableTypeMeta]; NSMutableArray *insertModels = [NSMutableArray array]; for (NSInteger index = 1; index <= 10000; index++) { - PCTLogMetaModel *model = [[PCTLogMetaModel alloc] init]; + HCTLogMetaModel *model = [[HCTLogMetaModel alloc] init]; model.log_id = index; // 。。。 [insertModels addObject:model]; } - [dbInstance add:insertModels inTableType:PCTLogTableTypeMeta]; - [dbInstance recordsCountInTableType:PCTLogTableTypeMeta completion:^(NSInteger count) { + [dbInstance add:insertModels inTableType:HCTLogTableTypeMeta]; + [dbInstance recordsCountInTableType:HCTLogTableTypeMeta completion:^(NSInteger count) { XCTAssert(count == insertModels.count, @"**Database「数据增加」功能:异常"); [exception fulfill]; }]; diff --git a/Chapter1 - iOS/1.80.md b/Chapter1 - iOS/1.80.md index ebd73e8..0cf0eea 100644 --- a/Chapter1 - iOS/1.80.md +++ b/Chapter1 - iOS/1.80.md @@ -11,9 +11,9 @@ 另外看到我在下面的代码段,有些命名风格、简写、分类、方法的命名等,我简单做个说明。 -- 数据上报 SDK 叫 `HermesClient`,我们规定类的命名一般用 SDK 的名字缩写,当前情况下缩写为 `PCT` -- 给 Category 命名,规则为 `类名 + SDK 前缀缩写的小写格式 + 下划线 + 驼峰命名格式的功能描述`。比如给 NSDate 增加一个获取毫秒时间戳的分类,那么类名为 `NSDate+pct_TimeStamp` -- 给 Category 的方法命名,规则为 `SDK 前缀缩写的小写格式 + 下划线 + 驼峰命名格式的功能描述`。比如给 NSDate 增加一个根据当前时间获取毫秒时间戳的方法,那么方法名为 `+ (long long)pct_currentTimestamp;` +- 数据上报 SDK 叫 `HermesClient`,我们规定类的命名一般用 SDK 的名字缩写,当前情况下缩写为 `HCT` +- 给 Category 命名,规则为 `类名 + SDK 前缀缩写的小写格式 + 下划线 + 驼峰命名格式的功能描述`。比如给 NSDate 增加一个获取毫秒时间戳的分类,那么类名为 `NSDate+HCT_TimeStamp` +- 给 Category 的方法命名,规则为 `SDK 前缀缩写的小写格式 + 下划线 + 驼峰命名格式的功能描述`。比如给 NSDate 增加一个根据当前时间获取毫秒时间戳的方法,那么方法名为 `+ (long long)HCT_currentTimestamp;` @@ -45,7 +45,7 @@ 所以数据字段基本如下 ```objective-c -@interface PCTItemModel : NSObject +@interface HCTItemModel : NSObject @property (nonatomic, copy) NSString *type; /<上报数据类型*/ @property (nonatomic, assign) BOOL onlyWifi; /<是否仅 Wi-Fi 上报*/ @@ -54,7 +54,7 @@ @end -@interface PCTConfigurationModel : NSObject +@interface HCTConfigurationModel : NSObject @property (nonatomic, copy) NSString *url; /<当前 namespace 对应的上报地址 */ @property (nonatomic, assign) BOOL isUpload; /<全局上报开关*/ @@ -65,7 +65,7 @@ @property (nonatomic, assign) NSInteger maxItem; /<最大条数 (范围 < 100)*/ @property (nonatomic, assign) NSInteger maxFlowMByte; /<每天最大非 Wi-Fi 上传流量单位 M (范围 < 100M)*/ @property (nonatomic, assign) NSInteger expirationDay; /<数据过期时间单位 天 (范围 < 30)*/ -@property (nonatomic, copy) NSArray *monitorList; /<配置项目*/ +@property (nonatomic, copy) NSArray *monitorList; /<配置项目*/ @end ``` @@ -75,31 +75,31 @@ 一个小窍门,每个属性写 `encode`、`decode` 会很麻烦,可以借助于宏来实现快速编写。 ```objective-c -#define PCT_DECODE(decoder, dataType, keyName) \ +#define HCT_DECODE(decoder, dataType, keyName) \ { \ _##keyName = [decoder decode##dataType##ForKey:NSStringFromSelector(@selector(keyName))]; \ }; -#define PCT_ENCODE(aCoder, dataType, key) \ +#define HCT_ENCODE(aCoder, dataType, key) \ { \ [aCoder encode##dataType:_##key forKey:NSStringFromSelector(@selector(key))]; \ }; - (instancetype)initWithCoder:(NSCoder *)aDecoder { if (self = [super init]) { - PCT_DECODE(aDecoder, Object, type) - PCT_DECODE(aDecoder, Bool, onlyWifi) - PCT_DECODE(aDecoder, Bool, isRealtime) - PCT_DECODE(aDecoder, Bool, isUploadPayload) + HCT_DECODE(aDecoder, Object, type) + HCT_DECODE(aDecoder, Bool, onlyWifi) + HCT_DECODE(aDecoder, Bool, isRealtime) + HCT_DECODE(aDecoder, Bool, isUploadPayload) } return self; } - (void)encodeWithCoder:(NSCoder *)aCoder { - PCT_ENCODE(aCoder, Object, type) - PCT_ENCODE(aCoder, Bool, onlyWifi) - PCT_ENCODE(aCoder, Bool, isRealtime) - PCT_ENCODE(aCoder, Bool, isUploadPayload) + HCT_ENCODE(aCoder, Object, type) + HCT_ENCODE(aCoder, Bool, onlyWifi) + HCT_ENCODE(aCoder, Bool, isRealtime) + HCT_ENCODE(aCoder, Bool, isUploadPayload) } ``` @@ -120,7 +120,7 @@ _##keyName = [decoder decode##dataType##ForKey:NSStringFromSelector(@selector(ke ```objective-c // 初始化一份默认配置 - (void)setDefaultConfigurationModel { - PCTConfigurationModel *configurationModel = [[PCTConfigurationModel alloc] init]; + HCTConfigurationModel *configurationModel = [[HCTConfigurationModel alloc] init]; configurationModel.url = @"https://***DomainName.com"; configurationModel.isUpload = YES; configurationModel.isGather = YES; @@ -131,31 +131,31 @@ _##keyName = [decoder decode##dataType##ForKey:NSStringFromSelector(@selector(ke configurationModel.maxFlowMByte = 20; configurationModel.expirationDay = 15; - PCTItemModel *appCrashItem = [[PCTItemModel alloc] init]; + HCTItemModel *appCrashItem = [[HCTItemModel alloc] init]; appCrashItem.type = @"appCrash"; appCrashItem.onlyWifi = NO; appCrashItem.isRealtime = YES; appCrashItem.isUploadPayload = YES; - PCTItemModel *appLagItem = [[PCTItemModel alloc] init]; + HCTItemModel *appLagItem = [[HCTItemModel alloc] init]; appLagItem.type = @"appLag"; appLagItem.onlyWifi = NO; appLagItem.isRealtime = NO; appLagItem.isUploadPayload = NO; - PCTItemModel *appBootItem = [[PCTItemModel alloc] init]; + HCTItemModel *appBootItem = [[HCTItemModel alloc] init]; appBootItem.type = @"appBoot"; appBootItem.onlyWifi = NO; appBootItem.isRealtime = NO; appBootItem.isUploadPayload = NO; - PCTItemModel *netItem = [[PCTItemModel alloc] init]; + HCTItemModel *netItem = [[HCTItemModel alloc] init]; netItem.type = @"net"; netItem.onlyWifi = NO; netItem.isRealtime = NO; netItem.isUploadPayload = NO; - PCTItemModel *netErrorItem = [[PCTItemModel alloc] init]; + HCTItemModel *netErrorItem = [[HCTItemModel alloc] init]; netErrorItem.type = @"netError"; netErrorItem.onlyWifi = NO; netErrorItem.isRealtime = NO; @@ -189,7 +189,7 @@ _##keyName = [decoder decode##dataType##ForKey:NSStringFromSelector(@selector(ke #pragma mark - Initial Methods + (instancetype)sharedInstance { - static PCTConfigurationService *_sharedInstance = nil; + static HCTConfigurationService *_sharedInstance = nil; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ _sharedInstance = [[self alloc] init]; @@ -218,9 +218,9 @@ _##keyName = [decoder decode##dataType##ForKey:NSStringFromSelector(@selector(ke }]; } -- (PCTConfigurationModel *)getConfigurationWithNamespace:(NSString *)namespace { - if (!PCT_IS_CLASS(namespace, NSString)) { - NSAssert(PCT_IS_CLASS(namespace, NSString), @"需要根据 namespace 参数获取对应的配置信息,所以必须是 NSString 类型"); +- (HCTConfigurationModel *)getConfigurationWithNamespace:(NSString *)namespace { + if (!HCT_IS_CLASS(namespace, NSString)) { + NSAssert(HCT_IS_CLASS(namespace, NSString), @"需要根据 namespace 参数获取对应的配置信息,所以必须是 NSString 类型"); return nil; } if (namespace.length == 0) { @@ -231,11 +231,11 @@ _##keyName = [decoder decode##dataType##ForKey:NSStringFromSelector(@selector(ke if (!configurationData) { return nil; } - if (!PCT_IS_CLASS(configurationData, NSDictionary)) { + if (!HCT_IS_CLASS(configurationData, NSDictionary)) { return nil; } NSDictionary *configurationDictionary = (NSDictionary *)configurationData; - return [PCTConfigurationModel modelWithDictionary:configurationDictionary]; + return [HCTConfigurationModel modelWithDictionary:configurationDictionary]; } @@ -249,12 +249,12 @@ _##keyName = [decoder decode##dataType##ForKey:NSStringFromSelector(@selector(ke } - (NSString *)savedFilePath { - return [NSString stringWithFormat:@"%@/%@", [self configurationDataFilePath], PCT_CONFIGURATION_FILEPATH]; + return [NSString stringWithFormat:@"%@/%@", [self configurationDataFilePath], HCT_CONFIGURATION_FILEPATH]; } // 初始化一份默认配置 - (void)setDefaultConfigurationModel { - PCTConfigurationModel *configurationModel = [[PCTConfigurationModel alloc] init]; + HCTConfigurationModel *configurationModel = [[HCTConfigurationModel alloc] init]; configurationModel.url = @"https://.com"; configurationModel.isUpload = YES; configurationModel.isGather = YES; @@ -265,31 +265,31 @@ _##keyName = [decoder decode##dataType##ForKey:NSStringFromSelector(@selector(ke configurationModel.maxFlowMByte = 20; configurationModel.expirationDay = 15; - PCTItemModel *appCrashItem = [[PCTItemModel alloc] init]; + HCTItemModel *appCrashItem = [[HCTItemModel alloc] init]; appCrashItem.type = @"appCrash"; appCrashItem.onlyWifi = NO; appCrashItem.isRealtime = YES; appCrashItem.isUploadPayload = YES; - PCTItemModel *appLagItem = [[PCTItemModel alloc] init]; + HCTItemModel *appLagItem = [[HCTItemModel alloc] init]; appLagItem.type = @"appLag"; appLagItem.onlyWifi = NO; appLagItem.isRealtime = NO; appLagItem.isUploadPayload = NO; - PCTItemModel *appBootItem = [[PCTItemModel alloc] init]; + HCTItemModel *appBootItem = [[HCTItemModel alloc] init]; appBootItem.type = @"appBoot"; appBootItem.onlyWifi = NO; appBootItem.isRealtime = NO; appBootItem.isUploadPayload = NO; - PCTItemModel *netItem = [[PCTItemModel alloc] init]; + HCTItemModel *netItem = [[HCTItemModel alloc] init]; netItem.type = @"net"; netItem.onlyWifi = NO; netItem.isRealtime = NO; netItem.isUploadPayload = NO; - PCTItemModel *netErrorItem = [[PCTItemModel alloc] init]; + HCTItemModel *netErrorItem = [[HCTItemModel alloc] init]; netErrorItem.type = @"netError"; netErrorItem.onlyWifi = NO; netErrorItem.isRealtime = NO; @@ -301,13 +301,13 @@ _##keyName = [decoder decode##dataType##ForKey:NSStringFromSelector(@selector(ke - (void)getConfigurationModelFromLocal { id unarchiveObject = [NSKeyedUnarchiver unarchiveObjectWithFile:[self savedFilePath]]; if (unarchiveObject) { - if (PCT_IS_CLASS(unarchiveObject, NSDictionary)) { + if (HCT_IS_CLASS(unarchiveObject, NSDictionary)) { self.configurationDictionary = (NSDictionary *)unarchiveObject; [self.configurationDictionary enumerateKeysAndObjectsUsingBlock:^(id _Nonnull key, id _Nonnull obj, BOOL * _Nonnull stop) { if ([key isEqualToString:HermesNAMESPACE]) { - if (PCT_IS_CLASS(obj, NSDictionary)) { + if (HCT_IS_CLASS(obj, NSDictionary)) { NSDictionary *configurationDictionary = (NSDictionary *)obj; - self.configurationModel = [PCTConfigurationModel modelWithDictionary:configurationDictionary]; + self.configurationModel = [HCTConfigurationModel modelWithDictionary:configurationDictionary]; } } }]; @@ -323,9 +323,9 @@ _##keyName = [decoder decode##dataType##ForKey:NSStringFromSelector(@selector(ke return filePath; } -- (PCTRequestFactory *)requester { +- (HCTRequestFactory *)requester { if (!_requester) { - _requester = [[PCTRequestFactory alloc] init]; + _requester = [[HCTRequestFactory alloc] init]; } return _requester; } @@ -563,15 +563,15 @@ _##keyName = [decoder decode##dataType##ForKey:NSStringFromSelector(@selector(ke ```objective-c // 创建队列 -self.dbOperationQueue = dispatch_queue_create(PCT_DATABASE_OPERATION_QUEUE, DISPATCH_QUEUE_CONCURRENT); -self.dbQueue = [FMDatabaseQueue databaseQueueWithPath:[PCTDatabase databaseFilePath]]; +self.dbOperationQueue = dispatch_queue_create(HCT_DATABASE_OPERATION_QUEUE, DISPATCH_QUEUE_CONCURRENT); +self.dbQueue = [FMDatabaseQueue databaseQueueWithPath:[HCTDatabase databaseFilePath]]; // 以删除数据为例,以异步任务的方式向并发队列提交任务,任务内部调用 FMDatabaseQueue 去串行执行每个任务 -- (void)removeAllLogsInTableType:(PCTLogTableType)tableType { +- (void)removeAllLogsInTableType:(HCTLogTableType)tableType { [self isExistInTable:tableType]; __weak typeof(self) weakself = self; dispatch_async(self.dbOperationQueue, ^{ - NSString *tableName = PCTGetTableNameFromType(tableType); + NSString *tableName = HCTGetTableNameFromType(tableType); [weakself removeAllLogsInTable:tableName]; }); } @@ -589,7 +589,7 @@ self.dbQueue = [FMDatabaseQueue databaseQueueWithPath:[PCTDatabase databaseFileP ```objective-c sleep(1); NSLog(@"1"); -dispatch_queue_t concurrentQueue = dispatch_queue_create("PCT_DATABASE_OPERATION_QUEUE", DISPATCH_QUEUE_CONCURRENT); +dispatch_queue_t concurrentQueue = dispatch_queue_create("HCT_DATABASE_OPERATION_QUEUE", DISPATCH_QUEUE_CONCURRENT); dispatch_async(concurrentQueue, ^{ sleep(2); NSLog(@"2"); @@ -643,15 +643,15 @@ create table if not exists ***_payload (id integer NOT NULL primary key autoincr ### 4. 数据库表的封装 ```objective-c -#import "PCTDatabase.h" +#import "HCTDatabase.h" #import -static NSString *const PCT_LOG_DATABASE_NAME = @"***.db"; -static NSString *const PCT_LOG_TABLE_META = @"***_hermes_meta"; -static NSString *const PCT_LOG_TABLE_PAYLOAD = @"***_hermes_payload"; -const char *PCT_DATABASE_OPERATION_QUEUE = "com.***.pct_database_operation_QUEUE"; +static NSString *const HCT_LOG_DATABASE_NAME = @"***.db"; +static NSString *const HCT_LOG_TABLE_META = @"***_hermes_meta"; +static NSString *const HCT_LOG_TABLE_PAYLOAD = @"***_hermes_payload"; +const char *HCT_DATABASE_OPERATION_QUEUE = "com.***.HCT_database_operation_QUEUE"; -@interface PCTDatabase () +@interface HCTDatabase () @property (nonatomic, strong) dispatch_queue_t dbOperationQueue; @property (nonatomic, strong) FMDatabaseQueue *dbQueue; @@ -659,11 +659,11 @@ const char *PCT_DATABASE_OPERATION_QUEUE = "com.***.pct_database_operation_QUEUE @end -@implementation PCTDatabase +@implementation HCTDatabase #pragma mark - life cycle + (instancetype)sharedInstance { - static PCTDatabase *_sharedInstance = nil; + static HCTDatabase *_sharedInstance = nil; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ _sharedInstance = [[self alloc] init]; @@ -675,8 +675,8 @@ const char *PCT_DATABASE_OPERATION_QUEUE = "com.***.pct_database_operation_QUEUE self = [super init]; self.dateFormatter = [[NSDateFormatter alloc] init]; [self.dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss A Z"]; - self.dbOperationQueue = dispatch_queue_create(PCT_DATABASE_OPERATION_QUEUE, DISPATCH_QUEUE_CONCURRENT); - self.dbQueue = [FMDatabaseQueue databaseQueueWithPath:[PCTDatabase databaseFilePath]]; + self.dbOperationQueue = dispatch_queue_create(HCT_DATABASE_OPERATION_QUEUE, DISPATCH_QUEUE_CONCURRENT); + self.dbQueue = [FMDatabaseQueue databaseQueueWithPath:[HCTDatabase databaseFilePath]]; [self.dbQueue inDatabase:^(FMDatabase *_Nonnull db) { [self createLogMetaTableIfNotExist:db]; [self createLogPayloadTableIfNotExist:db]; @@ -686,64 +686,64 @@ const char *PCT_DATABASE_OPERATION_QUEUE = "com.***.pct_database_operation_QUEUE #pragma mark - public Method -- (void)add:(NSArray *)logs inTableType:(PCTLogTableType)tableType { +- (void)add:(NSArray *)logs inTableType:(HCTLogTableType)tableType { [self isExistInTable:tableType]; __weak typeof(self) weakself = self; dispatch_async(self.dbOperationQueue, ^{ - NSString *tableName = PCTGetTableNameFromType(tableType); + NSString *tableName = HCTGetTableNameFromType(tableType); [weakself add:logs inTable:tableName]; }); } -- (void)remove:(NSArray *)logs inTableType:(PCTLogTableType)tableType { +- (void)remove:(NSArray *)logs inTableType:(HCTLogTableType)tableType { [self isExistInTable:tableType]; __weak typeof(self) weakself = self; dispatch_async(self.dbOperationQueue, ^{ - NSString *tableName = PCTGetTableNameFromType(tableType); + NSString *tableName = HCTGetTableNameFromType(tableType); [weakself remove:logs inTable:tableName]; }); } -- (void)removeAllLogsInTableType:(PCTLogTableType)tableType { +- (void)removeAllLogsInTableType:(HCTLogTableType)tableType { [self isExistInTable:tableType]; __weak typeof(self) weakself = self; dispatch_async(self.dbOperationQueue, ^{ - NSString *tableName = PCTGetTableNameFromType(tableType); + NSString *tableName = HCTGetTableNameFromType(tableType); [weakself removeAllLogsInTable:tableName]; }); } -- (void)removeOldestRecordsByCount:(NSInteger)count inTableType:(PCTLogTableType)tableType { +- (void)removeOldestRecordsByCount:(NSInteger)count inTableType:(HCTLogTableType)tableType { [self isExistInTable:tableType]; __weak typeof(self) weakself = self; dispatch_async(self.dbOperationQueue, ^{ - NSString *tableName = PCTGetTableNameFromType(tableType); + NSString *tableName = HCTGetTableNameFromType(tableType); [weakself removeOldestRecordsByCount:count inTable:tableName]; }); } -- (void)removeLatestRecordsByCount:(NSInteger)count inTableType:(PCTLogTableType)tableType { +- (void)removeLatestRecordsByCount:(NSInteger)count inTableType:(HCTLogTableType)tableType { [self isExistInTable:tableType]; __weak typeof(self) weakself = self; dispatch_async(self.dbOperationQueue, ^{ - NSString *tableName = PCTGetTableNameFromType(tableType); + NSString *tableName = HCTGetTableNameFromType(tableType); [weakself removeLatestRecordsByCount:count inTable:tableName]; }); } -- (void)removeRecordsBeforeDays:(NSInteger)day inTableType:(PCTLogTableType)tableType { +- (void)removeRecordsBeforeDays:(NSInteger)day inTableType:(HCTLogTableType)tableType { [self isExistInTable:tableType]; __weak typeof(self) weakself = self; dispatch_async(self.dbOperationQueue, ^{ - NSString *tableName = PCTGetTableNameFromType(tableType); + NSString *tableName = HCTGetTableNameFromType(tableType); [weakself removeRecordsBeforeDays:day inTable:tableName]; }); [self rebuildDatabaseFileInTableType:tableType]; } -- (void)removeDataUseCondition:(NSString *)condition inTableType:(PCTLogTableType)tableType { - if (!PCT_IS_CLASS(condition, NSString)) { - NSAssert(PCT_IS_CLASS(condition, NSString), @"自定义删除条件必须是字符串类型"); +- (void)removeDataUseCondition:(NSString *)condition inTableType:(HCTLogTableType)tableType { + if (!HCT_IS_CLASS(condition, NSString)) { + NSAssert(HCT_IS_CLASS(condition, NSString), @"自定义删除条件必须是字符串类型"); return; } if (condition.length == 0) { @@ -753,14 +753,14 @@ const char *PCT_DATABASE_OPERATION_QUEUE = "com.***.pct_database_operation_QUEUE [self isExistInTable:tableType]; __weak typeof(self) weakself = self; dispatch_async(self.dbOperationQueue, ^{ - NSString *tableName = PCTGetTableNameFromType(tableType); + NSString *tableName = HCTGetTableNameFromType(tableType); [weakself removeDataUseCondition:condition inTable:tableName]; }); } -- (void)updateData:(NSString *)state useCondition:(NSString *)condition inTableType:(PCTLogTableType)tableType { - if (!PCT_IS_CLASS(state, NSString)) { - NSAssert(PCT_IS_CLASS(state, NSString), @"数据表字段更改命令必须是合法字符串"); +- (void)updateData:(NSString *)state useCondition:(NSString *)condition inTableType:(HCTLogTableType)tableType { + if (!HCT_IS_CLASS(state, NSString)) { + NSAssert(HCT_IS_CLASS(state, NSString), @"数据表字段更改命令必须是合法字符串"); return; } if (state.length == 0) { @@ -768,8 +768,8 @@ const char *PCT_DATABASE_OPERATION_QUEUE = "com.***.pct_database_operation_QUEUE return; } - if (!PCT_IS_CLASS(condition, NSString)) { - NSAssert(PCT_IS_CLASS(condition, NSString), @"数据表字段更改条件必须是字符串类型"); + if (!HCT_IS_CLASS(condition, NSString)) { + NSAssert(HCT_IS_CLASS(condition, NSString), @"数据表字段更改条件必须是字符串类型"); return; } if (condition.length == 0) { @@ -779,16 +779,16 @@ const char *PCT_DATABASE_OPERATION_QUEUE = "com.***.pct_database_operation_QUEUE [self isExistInTable:tableType]; __weak typeof(self) weakself = self; dispatch_async(self.dbOperationQueue, ^{ - NSString *tableName = PCTGetTableNameFromType(tableType); + NSString *tableName = HCTGetTableNameFromType(tableType); [weakself updateData:state useCondition:condition inTable:tableName]; }); } -- (void)recordsCountInTableType:(PCTLogTableType)tableType completion:(void (^)(NSInteger count))completion { +- (void)recordsCountInTableType:(HCTLogTableType)tableType completion:(void (^)(NSInteger count))completion { [self isExistInTable:tableType]; __weak typeof(self) weakself = self; dispatch_async(self.dbOperationQueue, ^{ - NSString *tableName = PCTGetTableNameFromType(tableType); + NSString *tableName = HCTGetTableNameFromType(tableType); NSInteger recordsCount = [weakself recordsCountInTable:tableName]; if (completion) { completion(recordsCount); @@ -796,33 +796,33 @@ const char *PCT_DATABASE_OPERATION_QUEUE = "com.***.pct_database_operation_QUEUE }); } -- (void)getLatestRecoreds:(NSInteger)count inTableType:(PCTLogTableType)tableType completion:(void (^)(NSArray *records))completion { +- (void)getLatestRecoreds:(NSInteger)count inTableType:(HCTLogTableType)tableType completion:(void (^)(NSArray *records))completion { [self isExistInTable:tableType]; __weak typeof(self) weakself = self; dispatch_async(self.dbOperationQueue, ^{ - NSString *tableName = PCTGetTableNameFromType(tableType); - NSArray *records = [weakself getLatestRecoreds:count inTable:tableName]; + NSString *tableName = HCTGetTableNameFromType(tableType); + NSArray *records = [weakself getLatestRecoreds:count inTable:tableName]; if (completion) { completion(records); } }); } -- (void)getOldestRecoreds:(NSInteger)count inTableType:(PCTLogTableType)tableType completion:(void (^)(NSArray *records))completion { +- (void)getOldestRecoreds:(NSInteger)count inTableType:(HCTLogTableType)tableType completion:(void (^)(NSArray *records))completion { [self isExistInTable:tableType]; __weak typeof(self) weakself = self; dispatch_async(self.dbOperationQueue, ^{ - NSString *tableName = PCTGetTableNameFromType(tableType); - NSArray *records = [weakself getOldestRecoreds:count inTable:tableName]; + NSString *tableName = HCTGetTableNameFromType(tableType); + NSArray *records = [weakself getOldestRecoreds:count inTable:tableName]; if (completion) { completion(records); } }); } -- (void)getRecordsByCount:(NSInteger)count condtion:(NSString *)condition inTableType:(PCTLogTableType)tableType completion:(void (^)(NSArray *records))completion { - if (!PCT_IS_CLASS(condition, NSString)) { - NSAssert(PCT_IS_CLASS(condition, NSString), @"自定义查询条件必须是字符串类型"); +- (void)getRecordsByCount:(NSInteger)count condtion:(NSString *)condition inTableType:(HCTLogTableType)tableType completion:(void (^)(NSArray *records))completion { + if (!HCT_IS_CLASS(condition, NSString)) { + NSAssert(HCT_IS_CLASS(condition, NSString), @"自定义查询条件必须是字符串类型"); if (completion) { completion(nil); } @@ -836,25 +836,25 @@ const char *PCT_DATABASE_OPERATION_QUEUE = "com.***.pct_database_operation_QUEUE [self isExistInTable:tableType]; __weak typeof(self) weakself = self; dispatch_async(self.dbOperationQueue, ^{ - NSString *tableName = PCTGetTableNameFromType(tableType); - NSArray *records = [weakself getRecordsByCount:count condtion:condition inTable:tableName]; + NSString *tableName = HCTGetTableNameFromType(tableType); + NSArray *records = [weakself getRecordsByCount:count condtion:condition inTable:tableName]; if (completion) { completion(records); } }); } -- (void)rebuildDatabaseFileInTableType:(PCTLogTableType)tableType { +- (void)rebuildDatabaseFileInTableType:(HCTLogTableType)tableType { __weak typeof(self) weakself = self; dispatch_async(self.dbOperationQueue, ^{ - NSString *tableName = PCTGetTableNameFromType(tableType); + NSString *tableName = HCTGetTableNameFromType(tableType); [weakself rebuildDatabaseFileInTable:tableName]; }); } #pragma mark - CMDatabaseDelegate -- (void)add:(NSArray *)logs inTable:(NSString *)tableName { +- (void)add:(NSArray *)logs inTable:(NSString *)tableName { if (logs.count == 0) { return; } @@ -864,10 +864,10 @@ const char *PCT_DATABASE_OPERATION_QUEUE = "com.***.pct_database_operation_QUEUE for (NSInteger index = 0; index < logs.count; index++) { id obj = logs[index]; // meta 类型数据的处理逻辑 - if (PCT_IS_CLASS(obj, PCTLogMetaModel)) { - PCTLogMetaModel *model = (PCTLogMetaModel *)obj; + if (HCT_IS_CLASS(obj, HCTLogMetaModel)) { + HCTLogMetaModel *model = (HCTLogMetaModel *)obj; if (model.monitor_type == nil || model.meta == nil || model.created_time == nil || model.namespace == nil) { - PCTLOG(@"参数错误 { monitor_type: %@, meta: %@, created_time: %@, namespace: %@}", model.monitor_type, model.meta, model.created_time, model.namespace); + HCTLOG(@"参数错误 { monitor_type: %@, meta: %@, created_time: %@, namespace: %@}", model.monitor_type, model.meta, model.created_time, model.namespace); return; } @@ -876,10 +876,10 @@ const char *PCT_DATABASE_OPERATION_QUEUE = "com.***.pct_database_operation_QUEUE } // payload 类型数据的处理逻辑 - if (PCT_IS_CLASS(obj, PCTLogPayloadModel)) { - PCTLogPayloadModel *model = (PCTLogPayloadModel *)obj; + if (HCT_IS_CLASS(obj, HCTLogPayloadModel)) { + HCTLogPayloadModel *model = (HCTLogPayloadModel *)obj; if (model.monitor_type == nil || model.meta == nil || model.created_time == nil || model.namespace == nil) { - PCTLOG(@"参数错误 { monitor_type: %@, meta: %@, created_time: %@, namespace: %@}", model.monitor_type, model.meta, model.created_time, model.namespace); + HCTLOG(@"参数错误 { monitor_type: %@, meta: %@, created_time: %@, namespace: %@}", model.monitor_type, model.meta, model.created_time, model.namespace); return; } @@ -890,10 +890,10 @@ const char *PCT_DATABASE_OPERATION_QUEUE = "com.***.pct_database_operation_QUEUE }]; } -- (NSInteger)remove:(NSArray *)logs inTable:(NSString *)tableName { +- (NSInteger)remove:(NSArray *)logs inTable:(NSString *)tableName { NSString *sqlString = [NSString stringWithFormat:@"delete from %@ where report_id = ?", tableName]; [self.dbQueue inTransaction:^(FMDatabase *_Nonnull db, BOOL *_Nonnull rollback) { - [logs enumerateObjectsUsingBlock:^(PCTLogModel *_Nonnull obj, NSUInteger idx, BOOL *_Nonnull stop) { + [logs enumerateObjectsUsingBlock:^(HCTLogModel *_Nonnull obj, NSUInteger idx, BOOL *_Nonnull stop) { [db executeUpdate:sqlString withArgumentsInArray:@[obj.report_id]]; }]; }]; @@ -941,7 +941,7 @@ const char *PCT_DATABASE_OPERATION_QUEUE = "com.***.pct_database_operation_QUEUE NSString *sqlString = [NSString stringWithFormat:@"update %@ set %@ where %@", tableName, state, condition]; [self.dbQueue inDatabase:^(FMDatabase * _Nonnull db) { BOOL res = [db executeUpdate:sqlString]; - PCTLOG(res ? @"更新成功" : @"更新失败"); + HCTLOG(res ? @"更新成功" : @"更新失败"); }]; } @@ -957,8 +957,8 @@ const char *PCT_DATABASE_OPERATION_QUEUE = "com.***.pct_database_operation_QUEUE return recordsCount; } -- (NSArray *)getLatestRecoreds:(NSInteger)count inTable:(NSString *)tableName { - __block NSMutableArray *records = [NSMutableArray new]; +- (NSArray *)getLatestRecoreds:(NSInteger)count inTable:(NSString *)tableName { + __block NSMutableArray *records = [NSMutableArray new]; NSString *sql = [NSString stringWithFormat:@"select * from %@ order by created_time desc limit ?", tableName]; __weak typeof(self) weakself = self; @@ -966,8 +966,8 @@ const char *PCT_DATABASE_OPERATION_QUEUE = "com.***.pct_database_operation_QUEUE [db setDateFormat:weakself.dateFormatter]; FMResultSet *resultSet = [db executeQuery:sql withArgumentsInArray:@[@(count)]]; while ([resultSet next]) { - if ([tableName isEqualToString:PCT_LOG_TABLE_META]) { - PCTLogMetaModel *model = [[PCTLogMetaModel alloc] init]; + if ([tableName isEqualToString:HCT_LOG_TABLE_META]) { + HCTLogMetaModel *model = [[HCTLogMetaModel alloc] init]; model.log_id = [resultSet intForColumn:@"id"]; model.report_id = [resultSet stringForColumn:@"report_id"]; model.monitor_type = [resultSet stringForColumn:@"monitor_type"]; @@ -979,8 +979,8 @@ const char *PCT_DATABASE_OPERATION_QUEUE = "com.***.pct_database_operation_QUEUE model.is_used = [resultSet boolForColumn:@"is_used"]; [records addObject:model]; - } else if ([tableName isEqualToString:PCT_LOG_TABLE_PAYLOAD]) { - PCTLogPayloadModel *model = [[PCTLogPayloadModel alloc] init]; + } else if ([tableName isEqualToString:HCT_LOG_TABLE_PAYLOAD]) { + HCTLogPayloadModel *model = [[HCTLogPayloadModel alloc] init]; model.log_id = [resultSet intForColumn:@"id"]; model.report_id = [resultSet stringForColumn:@"report_id"]; model.monitor_type = [resultSet stringForColumn:@"monitor_type"]; @@ -999,8 +999,8 @@ const char *PCT_DATABASE_OPERATION_QUEUE = "com.***.pct_database_operation_QUEUE return records; } -- (NSArray *)getOldestRecoreds:(NSInteger)count inTable:(NSString *)tableName { - __block NSMutableArray *records = [NSMutableArray array]; +- (NSArray *)getOldestRecoreds:(NSInteger)count inTable:(NSString *)tableName { + __block NSMutableArray *records = [NSMutableArray array]; NSString *sqlString = [NSString stringWithFormat:@"select * from %@ order by created_time asc limit ?", tableName]; __weak typeof(self) weakself = self; @@ -1009,8 +1009,8 @@ const char *PCT_DATABASE_OPERATION_QUEUE = "com.***.pct_database_operation_QUEUE FMResultSet *resultSet = [db executeQuery:sqlString withArgumentsInArray:@[@(count)]]; while ([resultSet next]) { - if ([tableName isEqualToString:PCT_LOG_TABLE_META]) { - PCTLogMetaModel *model = [[PCTLogMetaModel alloc] init]; + if ([tableName isEqualToString:HCT_LOG_TABLE_META]) { + HCTLogMetaModel *model = [[HCTLogMetaModel alloc] init]; model.log_id = [resultSet intForColumn:@"id"]; model.report_id = [resultSet stringForColumn:@"report_id"]; model.monitor_type = [resultSet stringForColumn:@"monitor_type"]; @@ -1022,8 +1022,8 @@ const char *PCT_DATABASE_OPERATION_QUEUE = "com.***.pct_database_operation_QUEUE model.is_used = [resultSet boolForColumn:@"is_used"]; [records addObject:model]; - } else if ([tableName isEqualToString:PCT_LOG_TABLE_PAYLOAD]) { - PCTLogPayloadModel *model = [[PCTLogPayloadModel alloc] init]; + } else if ([tableName isEqualToString:HCT_LOG_TABLE_PAYLOAD]) { + HCTLogPayloadModel *model = [[HCTLogPayloadModel alloc] init]; model.log_id = [resultSet intForColumn:@"id"]; model.report_id = [resultSet stringForColumn:@"report_id"]; model.monitor_type = [resultSet stringForColumn:@"monitor_type"]; @@ -1042,8 +1042,8 @@ const char *PCT_DATABASE_OPERATION_QUEUE = "com.***.pct_database_operation_QUEUE return records; } -- (NSArray *)getRecordsByCount:(NSInteger)count condtion:(NSString *)condition inTable:(NSString *)tableName { - __block NSMutableArray *records = [NSMutableArray array]; +- (NSArray *)getRecordsByCount:(NSInteger)count condtion:(NSString *)condition inTable:(NSString *)tableName { + __block NSMutableArray *records = [NSMutableArray array]; __weak typeof(self) weakself = self; NSString *sqlString = [NSString stringWithFormat:@"select * from %@ where %@ order by created_time desc limit %zd", tableName, condition, count]; [self.dbQueue inDatabase:^(FMDatabase *_Nonnull db) { @@ -1052,8 +1052,8 @@ const char *PCT_DATABASE_OPERATION_QUEUE = "com.***.pct_database_operation_QUEUE FMResultSet *resultSet = [db executeQuery:sqlString]; while ([resultSet next]) { - if ([tableName isEqualToString:PCT_LOG_TABLE_META]) { - PCTLogMetaModel *model = [[PCTLogMetaModel alloc] init]; + if ([tableName isEqualToString:HCT_LOG_TABLE_META]) { + HCTLogMetaModel *model = [[HCTLogMetaModel alloc] init]; model.log_id = [resultSet intForColumn:@"id"]; model.report_id = [resultSet stringForColumn:@"report_id"]; model.monitor_type = [resultSet stringForColumn:@"monitor_type"]; @@ -1065,8 +1065,8 @@ const char *PCT_DATABASE_OPERATION_QUEUE = "com.***.pct_database_operation_QUEUE model.is_used = [resultSet boolForColumn:@"is_used"]; [records addObject:model]; - } else if ([tableName isEqualToString:PCT_LOG_TABLE_PAYLOAD]) { - PCTLogPayloadModel *model = [[PCTLogPayloadModel alloc] init]; + } else if ([tableName isEqualToString:HCT_LOG_TABLE_PAYLOAD]) { + HCTLogPayloadModel *model = [[HCTLogPayloadModel alloc] init]; model.log_id = [resultSet intForColumn:@"id"]; model.report_id = [resultSet stringForColumn:@"report_id"]; model.monitor_type = [resultSet stringForColumn:@"monitor_type"]; @@ -1096,48 +1096,48 @@ const char *PCT_DATABASE_OPERATION_QUEUE = "com.***.pct_database_operation_QUEUE + (NSString *)databaseFilePath { NSString *docsPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0]; - NSString *dbPath = [docsPath stringByAppendingPathComponent:PCT_LOG_DATABASE_NAME]; - PCTLOG(@"上报系统数据库文件位置 -> %@", dbPath); + NSString *dbPath = [docsPath stringByAppendingPathComponent:HCT_LOG_DATABASE_NAME]; + HCTLOG(@"上报系统数据库文件位置 -> %@", dbPath); return dbPath; } - (void)createLogMetaTableIfNotExist:(FMDatabase *)db { - NSString *createMetaTableSQL = [NSString stringWithFormat:@"create table if not exists %@ (id integer NOT NULL primary key autoincrement, report_id text, monitor_type text, is_biz integer NOT NULL, created_time datetime, meta text, namespace text, is_used integer NOT NULL, size integer NOT NULL)", PCT_LOG_TABLE_META]; + NSString *createMetaTableSQL = [NSString stringWithFormat:@"create table if not exists %@ (id integer NOT NULL primary key autoincrement, report_id text, monitor_type text, is_biz integer NOT NULL, created_time datetime, meta text, namespace text, is_used integer NOT NULL, size integer NOT NULL)", HCT_LOG_TABLE_META]; BOOL result = [db executeStatements:createMetaTableSQL]; - PCTLOG(@"确认日志Meta表是否存在 -> %@", result ? @"成功" : @"失败"); + HCTLOG(@"确认日志Meta表是否存在 -> %@", result ? @"成功" : @"失败"); } - (void)createLogPayloadTableIfNotExist:(FMDatabase *)db { - NSString *createMetaTableSQL = [NSString stringWithFormat:@"create table if not exists %@ (id integer NOT NULL primary key autoincrement, report_id text, monitor_type text, is_biz integer NOT NULL, created_time datetime, meta text, payload blob, namespace text, is_used integer NOT NULL, size integer NOT NULL)", PCT_LOG_TABLE_PAYLOAD]; + NSString *createMetaTableSQL = [NSString stringWithFormat:@"create table if not exists %@ (id integer NOT NULL primary key autoincrement, report_id text, monitor_type text, is_biz integer NOT NULL, created_time datetime, meta text, payload blob, namespace text, is_used integer NOT NULL, size integer NOT NULL)", HCT_LOG_TABLE_PAYLOAD]; BOOL result = [db executeStatements:createMetaTableSQL]; - PCTLOG(@"确认日志Payload表是否存在 -> %@", result ? @"成功" : @"失败"); + HCTLOG(@"确认日志Payload表是否存在 -> %@", result ? @"成功" : @"失败"); } -NS_INLINE NSString *PCTGetTableNameFromType(PCTLogTableType type) { - if (type == PCTLogTableTypeMeta) { - return PCT_LOG_TABLE_META; +NS_INLINE NSString *HCTGetTableNameFromType(HCTLogTableType type) { + if (type == HCTLogTableTypeMeta) { + return HCT_LOG_TABLE_META; } - if (type == PCTLogTableTypePayload) { - return PCT_LOG_TABLE_PAYLOAD; + if (type == HCTLogTableTypePayload) { + return HCT_LOG_TABLE_PAYLOAD; } return @""; } // 每次操作前检查数据库以及数据表是否存在,不存在则创建数据库和数据表 -- (void)isExistInTable:(PCTLogTableType)tableType { - NSString *databaseFilePath = [PCTDatabase databaseFilePath]; +- (void)isExistInTable:(HCTLogTableType)tableType { + NSString *databaseFilePath = [HCTDatabase databaseFilePath]; BOOL isExist = [[NSFileManager defaultManager] fileExistsAtPath:databaseFilePath]; if (!isExist) { - self.dbQueue = [FMDatabaseQueue databaseQueueWithPath:[PCTDatabase databaseFilePath]]; + self.dbQueue = [FMDatabaseQueue databaseQueueWithPath:[HCTDatabase databaseFilePath]]; } [self.dbQueue inDatabase:^(FMDatabase *db) { - NSString *tableName = PCTGetTableNameFromType(tableType); + NSString *tableName = HCTGetTableNameFromType(tableType); BOOL res = [db tableExists:tableName]; if (!res) { - if (tableType == PCTLogTableTypeMeta) { + if (tableType == HCTLogTableTypeMeta) { [self createLogMetaTableIfNotExist:db]; } - if (tableType == PCTLogTableTypeMeta) { + if (tableType == HCTLogTableTypeMeta) { [self createLogPayloadTableIfNotExist:db]; } } @@ -1150,12 +1150,12 @@ NS_INLINE NSString *PCTGetTableNameFromType(PCTLogTableType type) { 上面有个地方需要注意下,因为经常需要根据类型来判读操作那个数据表,使用频次很高,所以写成内联函数的形式 ```objective-c -NS_INLINE NSString *PCTGetTableNameFromType(PCTLogTableType type) { - if (type == PCTLogTableTypeMeta) { - return PCT_LOG_TABLE_META; +NS_INLINE NSString *HCTGetTableNameFromType(HCTLogTableType type) { + if (type == HCTLogTableTypeMeta) { + return HCT_LOG_TABLE_META; } - if (type == PCTLogTableTypePayload) { - return PCT_LOG_TABLE_PAYLOAD; + if (type == HCTLogTableTypePayload) { + return HCT_LOG_TABLE_PAYLOAD; } return @""; } @@ -1172,7 +1172,7 @@ NS_INLINE NSString *PCTGetTableNameFromType(PCTLogTableType type) { 可以看一下 Model 信息, ```objective-c -@interface PCTItemModel : NSObject +@interface HCTItemModel : NSObject @property (nonatomic, copy) NSString *type; /**<上报数据类型*/ @property (nonatomic, assign) BOOL onlyWifi; /**<是否仅 Wi-Fi 上报*/ @@ -1181,7 +1181,7 @@ NS_INLINE NSString *PCTGetTableNameFromType(PCTLogTableType type) { @end -@interface PCTConfigurationModel : NSObject +@interface HCTConfigurationModel : NSObject @property (nonatomic, copy) NSString *url; /**<当前 namespace 对应的上报地址 */ @property (nonatomic, assign) BOOL isUpload; /**<全局上报开关*/ @@ -1192,7 +1192,7 @@ NS_INLINE NSString *PCTGetTableNameFromType(PCTLogTableType type) { @property (nonatomic, assign) NSInteger maxItem; /**<最大条数 (范围 < 100)*/ @property (nonatomic, assign) NSInteger maxFlowMByte; /**<每天最大非 Wi-Fi 上传流量单位 M (范围 < 100M)*/ @property (nonatomic, assign) NSInteger expirationDay; /**<数据过期时间单位 天 (范围 < 30)*/ -@property (nonatomic, copy) NSArray *monitorList; /**<配置项目*/ +@property (nonatomic, copy) NSArray *monitorList; /**<配置项目*/ @end ``` @@ -1244,8 +1244,8 @@ NS_INLINE NSString *PCTGetTableNameFromType(PCTLogTableType type) { - (void)sendWithType:(NSString *)type meta:(NSDictionary *)meta payload:(NSData *__nullable)payload { // 1. 检查参数合法性 NSString *warning = [NSString stringWithFormat:@"%@不能是空字符串", type]; - if (!PCT_IS_CLASS(type, NSString)) { - NSAssert1(PCT_IS_CLASS(type, NSString), warning, type); + if (!HCT_IS_CLASS(type, NSString)) { + NSAssert1(HCT_IS_CLASS(type, NSString), warning, type); return; } if (type.length == 0) { @@ -1253,7 +1253,7 @@ NS_INLINE NSString *PCTGetTableNameFromType(PCTLogTableType type) { return; } - if (!PCT_IS_CLASS(meta, NSDictionary)) { + if (!HCT_IS_CLASS(meta, NSDictionary)) { return; } if (meta.allKeys.count == 0) { @@ -1262,7 +1262,7 @@ NS_INLINE NSString *PCTGetTableNameFromType(PCTLogTableType type) { // 2. 判断当前 namespace 是否开启了收集 if (!self.configureModel.isGather) { - PCTLOG(@"%@", [NSString stringWithFormat:@"Namespace: %@ 下数据收集开关为关闭状态", self.namespace]); + HCTLOG(@"%@", [NSString stringWithFormat:@"Namespace: %@ 下数据收集开关为关闭状态", self.namespace]); return ; } @@ -1273,11 +1273,11 @@ NS_INLINE NSString *PCTGetTableNameFromType(PCTLogTableType type) { } // 3. 先写入 meta 表 - PCTCommonModel *commonModel = [[PCTCommonModel alloc] init]; + HCTCommonModel *commonModel = [[HCTCommonModel alloc] init]; [self sendWithType:type namespace:HermesNAMESPACE meta:meta isBiz:NO commonModel:commonModel]; // 4. 如果 payload 不存在则退出当前执行 - if (!PCT_IS_CLASS(payload, NSData) && !payload) { + if (!HCT_IS_CLASS(payload, NSData) && !payload) { return; } @@ -1304,7 +1304,7 @@ NS_INLINE NSString *PCTGetTableNameFromType(PCTLogTableType type) { NSError *error; NSData *metaData = [NSJSONSerialization dataWithJSONObject:metaDictionary options:0 error:&error]; if (error) { - PCTLOG(@"%@", error); + HCTLOG(@"%@", error); return; } NSString *metaContentString = [[NSString alloc] initWithData:metaData encoding:NSUTF8StringEncoding]; @@ -1315,17 +1315,17 @@ NS_INLINE NSString *PCTGetTableNameFromType(PCTLogTableType type) { [totalData appendData:payload]; // 8. 再写入 payload 表 - PCTLogPayloadModel *payloadModel = [[PCTLogPayloadModel alloc] init]; + HCTLogPayloadModel *payloadModel = [[HCTLogPayloadModel alloc] init]; payloadModel.is_used = NO; payloadModel.namespace = HermesNAMESPACE; - payloadModel.report_id = PCT_SAFE_STRING(commonModel.REPORT_ID); - payloadModel.monitor_type = PCT_SAFE_STRING(type); + payloadModel.report_id = HCT_SAFE_STRING(commonModel.REPORT_ID); + payloadModel.monitor_type = HCT_SAFE_STRING(type); payloadModel.is_biz = NO; - payloadModel.created_time = PCT_SAFE_STRING(commonModel.CREATE_TIME); - payloadModel.meta = PCT_SAFE_STRING(metaContentString); + payloadModel.created_time = HCT_SAFE_STRING(commonModel.CREATE_TIME); + payloadModel.meta = HCT_SAFE_STRING(metaContentString); payloadModel.payload = payload; payloadModel.size = totalData.length; - [PCT_DATABASE add:@[payloadModel] inTableType:PCTLogTableTypePayload]; + [HCT_DATABASE add:@[payloadModel] inTableType:HCTLogTableTypePayload]; // 9. 判断是否触发实时上报 [self handleUploadDataWithtype:type]; @@ -1453,13 +1453,13 @@ NS_INLINE NSString *PCTGetTableNameFromType(PCTLogTableType type) { - 在数据聚合的时候优先获取 crash 数据,总数据条数需要小于上报配置数据的条数限制、总数据大小需要小于上报配置数据的大小限制。这里的处理使用了递归,改变了函数参数 ```objective-c - - (void)assembleDataInTable:(PCTLogTableType)tableType networkType:(NetworkingManagerStatusType)networkType completion:(void (^)(NSArray *records))completion { + - (void)assembleDataInTable:(HCTLogTableType)tableType networkType:(NetworkingManagerStatusType)networkType completion:(void (^)(NSArray *records))completion { // 1. 获取到合适的 Crash 类型的数据 [self fetchCrashDataByCount:self.configureModel.maxFlowMByte inTable:tableType upperBound:self.configureModel.maxBodyMByte - completion:^(NSArray *records) { - NSArray *crashData = records; + completion:^(NSArray *records) { + NSArray *crashData = records; // 2. 计算剩余需要的数据条数和剩余需要的数据大小 NSInteger remainingCount = self.configureModel.maxItem - crashData.count; float remainingSize = self.configureModel.maxBodyMByte - [self calculateDataSize:crashData]; @@ -1469,8 +1469,8 @@ NS_INLINE NSString *PCTGetTableNameFromType(PCTLogTableType type) { inTable:tableType upperBound:remainingSize isWiFI:isWifi - completion:^(NSArray *records) { - NSArray *dataExceptCrash = records; + completion:^(NSArray *records) { + NSArray *dataExceptCrash = records; NSMutableArray *dataSource = [NSMutableArray array]; [dataSource addObjectsFromArray:crashData]; @@ -1482,27 +1482,27 @@ NS_INLINE NSString *PCTGetTableNameFromType(PCTLogTableType type) { }]; } - - (void)fetchDataExceptCrash:(NSInteger)count inTable:(PCTLogTableType)tableType upperBound:(float)size isWiFI:(BOOL)isWifi completion:(void (^)(NSArray *records))completion { + - (void)fetchDataExceptCrash:(NSInteger)count inTable:(HCTLogTableType)tableType upperBound:(float)size isWiFI:(BOOL)isWifi completion:(void (^)(NSArray *records))completion { // 1. 根据剩余需要数据条数去查询表中非 Crash 类型的数据集合 __block NSMutableArray *conditions = [NSMutableArray array]; - [self.configureModel.monitorList enumerateObjectsUsingBlock:^(PCTItemModel * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { + [self.configureModel.monitorList enumerateObjectsUsingBlock:^(HCTItemModel * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { if (isWifi) { if (![obj.type isEqualToString:@"appCrash"]) { [conditions addObject:[NSString stringWithFormat:@"'%@'", obj.type]]; } } else { if (!obj.onlyWifi && ![obj.type isEqualToString:@"appCrash"]) { - [conditions addObject:[NSString stringWithFormat:@"'%@'", PCT_SAFE_STRING(obj.type)]]; + [conditions addObject:[NSString stringWithFormat:@"'%@'", HCT_SAFE_STRING(obj.type)]]; } } }]; NSString *queryCrashDataCondition = [NSString stringWithFormat:@"monitor_type in (%@) and is_used = 0 and namespace = '%@'", [conditions componentsJoinedByString:@","], self.namespace]; // 2. 根据是否有 Wifi 查找对应的数据 - [PCT_DATABASE getRecordsByCount:count + [HCT_DATABASE getRecordsByCount:count condtion:queryCrashDataCondition inTableType:tableType - completion:^(NSArray *_Nonnull records) { + completion:^(NSArray *_Nonnull records) { // 3. 非 Crash 类型的数据集合大小是否超过剩余需要的数据大小 float dataSize = [self calculateDataSize:records]; @@ -1581,7 +1581,7 @@ NS_INLINE NSString *PCTGetTableNameFromType(PCTLogTableType type) { @return 上报基础信息 */ -- (PCTCommonModel *)getCommon; +- (HCTCommonModel *)getCommon; /** 是否需要采集上报 @@ -1602,15 +1602,15 @@ NS_INLINE NSString *PCTGetTableNameFromType(PCTLogTableType type) { ```objective-c - (void)setup { // 注册 mget 获取监控和各业务线的配置信息,会产生多个 namespace,彼此平行、隔离 - [[PCTConfigurationService sharedInstance] registerAndFetchConfigurationInfo]; + [[HCTConfigurationService sharedInstance] registerAndFetchConfigurationInfo]; [self.configutations enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { - PCTService *service = [[PCTService alloc] initWithNamespace:obj]; + HCTService *service = [[HCTService alloc] initWithNamespace:obj]; [self.services setObject:service forKey:obj]; }]; - PCTService *hermesService = [self.services objectForKey:HermesNAMESPACE]; + HCTService *hermesService = [self.services objectForKey:HermesNAMESPACE]; if (!hermesService) { - hermesService = [[PCTService alloc] initWithNamespace:HermesNAMESPACE]; + hermesService = [[HCTService alloc] initWithNamespace:HermesNAMESPACE]; [self.services setObject:hermesService forKey:HermesNAMESPACE]; } } @@ -1620,26 +1620,26 @@ NS_INLINE NSString *PCTGetTableNameFromType(PCTLogTableType type) { ### 2. 核心实现 -真正处理逻辑的是 `PCTService` 类。 +真正处理逻辑的是 `HCTService` 类。 ```objective-c -#define PCT_SAVED_FLOW @"PCT_SAVED_FLOW" -#define PCT_SAVED_TIMESTAMP @"PCT_SAVED_TIMESTAMP" +#define HCT_SAVED_FLOW @"HCT_SAVED_FLOW" +#define HCT_SAVED_TIMESTAMP @"HCT_SAVED_TIMESTAMP" -@interface PCTService () +@interface HCTService () @property (nonatomic, copy) NSString *requestBaseUrl; /**<需要配置的baseUrl*/ -@property (nonatomic, copy) PCTConfigurationModel *configureModel; /**<当前 namespace 下的配置信息*/ +@property (nonatomic, copy) HCTConfigurationModel *configureModel; /**<当前 namespace 下的配置信息*/ @property (nonatomic, copy) NSString *metaURL; /** %zd or is_used = 1", threshold, self.namespace, sizeUpperLimit]; - [PCT_DATABASE removeDataUseCondition:sqlString inTableType:PCTLogTableTypeMeta]; - [PCT_DATABASE removeDataUseCondition:sqlString inTableType:PCTLogTableTypePayload]; + [HCT_DATABASE removeDataUseCondition:sqlString inTableType:HCTLogTableTypeMeta]; + [HCT_DATABASE removeDataUseCondition:sqlString inTableType:HCTLogTableTypePayload]; } // 启动时刻清理数据表空间碎片,回收磁盘大小 - (void)rebuildDatabase { - [PCT_DATABASE rebuildDatabaseFileInTableType:PCTLogTableTypeMeta]; - [PCT_DATABASE rebuildDatabaseFileInTableType:PCTLogTableTypePayload]; + [HCT_DATABASE rebuildDatabaseFileInTableType:HCTLogTableTypeMeta]; + [HCT_DATABASE rebuildDatabaseFileInTableType:HCTLogTableTypePayload]; } // 判断数据是否可以落库 - (BOOL)validateLogData:(NSString *)dataType { - NSArray *monitors = self.configureModel.monitorList; + NSArray *monitors = self.configureModel.monitorList; __block BOOL isValidate = NO; - [monitors enumerateObjectsUsingBlock:^(PCTItemModel *_Nonnull obj, NSUInteger idx, BOOL *_Nonnull stop) { + [monitors enumerateObjectsUsingBlock:^(HCTItemModel *_Nonnull obj, NSUInteger idx, BOOL *_Nonnull stop) { if ([obj.type isEqualToString:dataType]) { isValidate = YES; *stop = YES; @@ -1868,7 +1868,7 @@ NS_INLINE NSString *PCTGetTableNameFromType(PCTLogTableType type) { - (void)handleUploadDataWithtype:(NSString *)type { __block BOOL canUploadInTime = NO; - [self.configureModel.monitorList enumerateObjectsUsingBlock:^(PCTItemModel *_Nonnull obj, NSUInteger idx, BOOL *_Nonnull stop) { + [self.configureModel.monitorList enumerateObjectsUsingBlock:^(HCTItemModel *_Nonnull obj, NSUInteger idx, BOOL *_Nonnull stop) { if ([type isEqualToString:obj.type]) { if (obj.isRealtime) { canUploadInTime = YES; @@ -1885,17 +1885,17 @@ NS_INLINE NSString *PCTGetTableNameFromType(PCTLogTableType type) { } // 对内和对外的存储都走这个流程。通过这个接口设置 is_biz 信息 -- (void)sendWithType:(NSString *)type namespace:(NSString *)namespace meta:(NSDictionary *)meta isBiz:(BOOL)is_biz commonModel:(PCTCommonModel *)commonModel { +- (void)sendWithType:(NSString *)type namespace:(NSString *)namespace meta:(NSDictionary *)meta isBiz:(BOOL)is_biz commonModel:(HCTCommonModel *)commonModel { // 0. 判断当前 namespace 是否开启了收集 if (!self.configureModel.isGather) { - PCTLOG(@"%@", [NSString stringWithFormat:@"Namespace: %@ 下数据收集开关为关闭状态", self.namespace]); + HCTLOG(@"%@", [NSString stringWithFormat:@"Namespace: %@ 下数据收集开关为关闭状态", self.namespace]); return ; } // 1. 检查参数合法性 NSString *warning = [NSString stringWithFormat:@"%@不能是空字符串", type]; - if (!PCT_IS_CLASS(type, NSString)) { - NSAssert1(PCT_IS_CLASS(type, NSString), warning, type); + if (!HCT_IS_CLASS(type, NSString)) { + NSAssert1(HCT_IS_CLASS(type, NSString), warning, type); return; } if (type.length == 0) { @@ -1903,7 +1903,7 @@ NS_INLINE NSString *PCTGetTableNameFromType(PCTLogTableType type) { return; } - if (!PCT_IS_CLASS(meta, NSDictionary)) { + if (!HCT_IS_CLASS(meta, NSDictionary)) { return; } if (meta.allKeys.count == 0) { @@ -1938,7 +1938,7 @@ NS_INLINE NSString *PCTGetTableNameFromType(PCTLogTableType type) { NSError *error; NSData *metaData = [NSJSONSerialization dataWithJSONObject:metaDictionary options:0 error:&error]; if (error) { - PCTLOG(@"%@", error); + HCTLOG(@"%@", error); return; } @@ -1952,17 +1952,17 @@ NS_INLINE NSString *PCTGetTableNameFromType(PCTLogTableType type) { NSString *metaContentString = [[NSString alloc] initWithData:metaData encoding:NSUTF8StringEncoding]; // 6. 构造 MetaModel 模型 - PCTLogMetaModel *metaModel = [[PCTLogMetaModel alloc] init]; + HCTLogMetaModel *metaModel = [[HCTLogMetaModel alloc] init]; metaModel.namespace = namespace; - metaModel.report_id = PCT_SAFE_STRING(commonModel.REPORT_ID); - metaModel.monitor_type = PCT_SAFE_STRING(type); - metaModel.created_time = PCT_SAFE_STRING(commonModel.CREATE_TIME); - metaModel.meta = PCT_SAFE_STRING(metaContentString); + metaModel.report_id = HCT_SAFE_STRING(commonModel.REPORT_ID); + metaModel.monitor_type = HCT_SAFE_STRING(type); + metaModel.created_time = HCT_SAFE_STRING(commonModel.CREATE_TIME); + metaModel.meta = HCT_SAFE_STRING(metaContentString); metaModel.size = metaData.length; metaModel.is_biz = is_biz; // 7. 写入数据库 - [PCT_DATABASE add:@[metaModel] inTableType:PCTLogTableTypeMeta]; + [HCT_DATABASE add:@[metaModel] inTableType:HCTLogTableTypeMeta]; // 8. 判断是否触发实时上报(对内的接口则在函数内部判断,如果是对外的则在这里判断) if (is_biz) { @@ -1970,9 +1970,9 @@ NS_INLINE NSString *PCTGetTableNameFromType(PCTLogTableType type) { } } -- (BOOL)needUploadPayload:(PCTLogPayloadModel *)model { +- (BOOL)needUploadPayload:(HCTLogPayloadModel *)model { __block BOOL needed = NO; - [self.configureModel.monitorList enumerateObjectsUsingBlock:^(PCTItemModel *_Nonnull obj, NSUInteger idx, BOOL *_Nonnull stop) { + [self.configureModel.monitorList enumerateObjectsUsingBlock:^(HCTItemModel *_Nonnull obj, NSUInteger idx, BOOL *_Nonnull stop) { if ([obj.type isEqualToString:model.monitor_type] && obj.isUploadPayload) { needed = YES; *stop = YES; @@ -1987,17 +1987,17 @@ NS_INLINE NSString *PCTGetTableNameFromType(PCTLogTableType type) { 2. 上报完成后则根据真实网络通信中组装的 payload 进行大小计算 */ - (float)calculateDataSize:(id)data { - if (PCT_IS_CLASS(data, NSArray)) { + if (HCT_IS_CLASS(data, NSArray)) { __block NSInteger dataLength = 0; NSArray *uploadDatasource = (NSArray *)data; [uploadDatasource enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL *_Nonnull stop) { - if (PCT_IS_CLASS(obj, PCTLogModel)) { - PCTLogModel *uploadModel = (PCTLogModel *)obj; + if (HCT_IS_CLASS(obj, HCTLogModel)) { + HCTLogModel *uploadModel = (HCTLogModel *)obj; dataLength += uploadModel.size; } }]; return dataLength / (1024 * 1024.0); - } else if (PCT_IS_CLASS(data, NSData)) { + } else if (HCT_IS_CLASS(data, NSData)) { NSData *rawData = (NSData *)data; return rawData.length / (1024 * 1024.0); } else { @@ -2041,7 +2041,7 @@ NS_INLINE NSString *PCTGetTableNameFromType(PCTLogTableType type) { [self.requester networkStatusWithBlock:^(NetworkingManagerStatusType status) { switch (status) { case NetworkingManagerStatusUnknown: { - PCTLOG(@"没有网络权限哦"); + HCTLOG(@"没有网络权限哦"); if (completionBlock) { completionBlock(NO, NetworkingManagerStatusUnknown); } @@ -2092,9 +2092,9 @@ NS_INLINE NSString *PCTGetTableNameFromType(PCTLogTableType type) { - (void)handleUploadTaskInMetaTable:(NetworkingManagerStatusType)networkType { __weak typeof(self) weakself = self; // 1. 数据聚合 - [self assembleDataInTable:PCTLogTableTypeMeta + [self assembleDataInTable:HCTLogTableTypeMeta networkType:networkType - completion:^(NSArray *records) { + completion:^(NSArray *records) { if (records.count == 0) { return; } @@ -2103,9 +2103,9 @@ NS_INLINE NSString *PCTGetTableNameFromType(PCTLogTableType type) { __block NSMutableArray *usedReportIds = [NSMutableArray array]; // 2.1. 遍历拼接model,取出 meta,用 \n 拼接 - [records enumerateObjectsUsingBlock:^(PCTLogModel *_Nonnull obj, NSUInteger idx, BOOL *_Nonnull stop) { - if (PCT_IS_CLASS(obj, PCTLogMetaModel)) { - PCTLogMetaModel *metaModel = (PCTLogMetaModel *)obj; + [records enumerateObjectsUsingBlock:^(HCTLogModel *_Nonnull obj, NSUInteger idx, BOOL *_Nonnull stop) { + if (HCT_IS_CLASS(obj, HCTLogMetaModel)) { + HCTLogMetaModel *metaModel = (HCTLogMetaModel *)obj; BOOL shouldAppendLineBreakSymbol = idx < (records.count - 1); [usedReportIds addObject:[NSString stringWithFormat:@"'%@'", metaModel.report_id]]; [metaStrings appendString:[NSString stringWithFormat:@"%@%@", metaModel.meta, shouldAppendLineBreakSymbol ? @"\n" : @""]]; @@ -2115,11 +2115,11 @@ NS_INLINE NSString *PCTGetTableNameFromType(PCTLogTableType type) { return; } // 2.2 拼接后的内容先压缩再加密 - NSData *data = [PCTDataSerializer compressAndEncryptWithString:metaStrings]; + NSData *data = [HCTDataSerializer compressAndEncryptWithString:metaStrings]; // 3. 将取出来用于接口请求的数据标记为 dirty NSString *updateCondtion = [NSString stringWithFormat:@"report_id in (%@)", [usedReportIds componentsJoinedByString:@","]]; - [[PCTDatabase sharedInstance] updateData:@"is_used = 1" useCondition:updateCondtion inTableType:PCTLogTableTypeMeta]; + [[HCTDatabase sharedInstance] updateData:@"is_used = 1" useCondition:updateCondtion inTableType:HCTLogTableTypeMeta]; // 4. 请求网络 NSString *requestURL = [NSString stringWithFormat:@"%@/%@", weakself.requestBaseUrl, weakself.metaURL]; @@ -2127,7 +2127,7 @@ NS_INLINE NSString *PCTGetTableNameFromType(PCTLogTableType type) { [weakself.requester postDataWithRequestURL:requestURL bodyData:data success:^{ - [weakself deleteInvalidateData:records inTableType:PCTLogTableTypeMeta]; + [weakself deleteInvalidateData:records inTableType:HCTLogTableTypeMeta]; if (networkType == NetworkingManagerStatusReachableViaWWAN) { float currentFlow = [weakself.currentFlow floatValue]; currentFlow += [weakself calculateDataSize:data]; @@ -2135,7 +2135,7 @@ NS_INLINE NSString *PCTGetTableNameFromType(PCTLogTableType type) { } } failure:^(NSError *_Nonnull error) { - [[PCTDatabase sharedInstance] updateData:@"is_used = 0" useCondition:updateCondtion inTableType:PCTLogTableTypeMeta]; + [[HCTDatabase sharedInstance] updateData:@"is_used = 0" useCondition:updateCondtion inTableType:HCTLogTableTypeMeta]; if (networkType == NetworkingManagerStatusReachableViaWWAN) { float currentFlow = [weakself.currentFlow floatValue]; currentFlow += [weakself calculateDataSize:data]; @@ -2157,16 +2157,16 @@ NS_INLINE NSString *PCTGetTableNameFromType(PCTLogTableType type) { // 2.1. 遍历拼接model,取出 meta,用 \n 拼接 [rawArray enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL *_Nonnull stop) { - if (PCT_IS_CLASS(obj, PCTLogPayloadModel)) { - PCTLogPayloadModel *payloadModel = (PCTLogPayloadModel *)obj; + if (HCT_IS_CLASS(obj, HCTLogPayloadModel)) { + HCTLogPayloadModel *payloadModel = (HCTLogPayloadModel *)obj; BOOL shouldAppendLineBreakSymbol = idx < (rawArray.count - 1); - [metaStrings appendString:[NSString stringWithFormat:@"%@%@", PCT_SAFE_STRING(payloadModel.meta), shouldAppendLineBreakSymbol ? @"\n" : @""]]; + [metaStrings appendString:[NSString stringWithFormat:@"%@%@", HCT_SAFE_STRING(payloadModel.meta), shouldAppendLineBreakSymbol ? @"\n" : @""]]; // 2.2 判断是否需要上传 payload 信息。如果需要则将 payload 取出。 if ([self needUploadPayload:payloadModel]) { if (payloadModel.payload) { - NSData *payloadData = [PCTDataSerializer compressAndEncryptWithData:payloadModel.payload]; + NSData *payloadData = [HCTDataSerializer compressAndEncryptWithData:payloadModel.payload]; if (payloadData) { [payloads addObject:payloadData]; } @@ -2175,7 +2175,7 @@ NS_INLINE NSString *PCTGetTableNameFromType(PCTLogTableType type) { } }]; - NSData *metaData = [PCTDataSerializer compressAndEncryptWithString:metaStrings]; + NSData *metaData = [HCTDataSerializer compressAndEncryptWithString:metaStrings]; __block NSMutableData *headerData = [NSMutableData data]; unsigned short metaLength = (unsigned short)metaData.length; @@ -2207,9 +2207,9 @@ NS_INLINE NSString *PCTGetTableNameFromType(PCTLogTableType type) { - (void)handleUploadTaskInPayloadTable:(NetworkingManagerStatusType)networkType { __weak typeof(self) weakself = self; // 1. 数据聚合 - [self assembleDataInTable:PCTLogTableTypePayload + [self assembleDataInTable:HCTLogTableTypePayload networkType:networkType - completion:^(NSArray *records) { + completion:^(NSArray *records) { if (records.count == 0) { return; } @@ -2223,14 +2223,14 @@ NS_INLINE NSString *PCTGetTableNameFromType(PCTLogTableType type) { // 3. 将取出来用于接口请求的数据标记为 dirty __block NSMutableArray *usedReportIds = [NSMutableArray array]; [canUploadPayloadData enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { - if (PCT_IS_CLASS(obj, PCTLogModel)) { - PCTLogModel *model = (PCTLogModel *)obj; + if (HCT_IS_CLASS(obj, HCTLogModel)) { + HCTLogModel *model = (HCTLogModel *)obj; [usedReportIds addObject:[NSString stringWithFormat:@"'%@'", model.report_id]]; } }]; NSString *updateCondtion = [NSString stringWithFormat:@"report_id in (%@)", [usedReportIds componentsJoinedByString:@","]]; - [[PCTDatabase sharedInstance] updateData:@"is_used = 1" useCondition:updateCondtion inTableType:PCTLogTableTypePayload]; + [[HCTDatabase sharedInstance] updateData:@"is_used = 1" useCondition:updateCondtion inTableType:HCTLogTableTypePayload]; // 4. 将取出的数据聚合,组成报文 NSData *uploadData = [self handlePayloadData:canUploadPayloadData]; @@ -2241,7 +2241,7 @@ NS_INLINE NSString *PCTGetTableNameFromType(PCTLogTableType type) { [weakself.requester postDataWithRequestURL:requestURL bodyData:uploadData success:^{ - [weakself deleteInvalidateData:canUploadPayloadData inTableType:PCTLogTableTypePayload]; + [weakself deleteInvalidateData:canUploadPayloadData inTableType:HCTLogTableTypePayload]; if (networkType == NetworkingManagerStatusReachableViaWWAN) { float currentFlow = [weakself.currentFlow floatValue]; currentFlow += [weakself calculateDataSize:uploadData]; @@ -2249,7 +2249,7 @@ NS_INLINE NSString *PCTGetTableNameFromType(PCTLogTableType type) { } } failure:^(NSError *_Nonnull error) { - [[PCTDatabase sharedInstance] updateData:@"is_used = 0" useCondition:updateCondtion inTableType:PCTLogTableTypePayload]; + [[HCTDatabase sharedInstance] updateData:@"is_used = 0" useCondition:updateCondtion inTableType:HCTLogTableTypePayload]; if (networkType == NetworkingManagerStatusReachableViaWWAN) { float currentFlow = [weakself.currentFlow floatValue]; currentFlow += [weakself calculateDataSize:uploadData]; @@ -2260,13 +2260,13 @@ NS_INLINE NSString *PCTGetTableNameFromType(PCTLogTableType type) { } // 清除过期数据 -- (void)deleteInvalidateData:(NSArray *)data inTableType:(PCTLogTableType)tableType { - [PCT_DATABASE remove:data inTableType:tableType]; +- (void)deleteInvalidateData:(NSArray *)data inTableType:(HCTLogTableType)tableType { + [HCT_DATABASE remove:data inTableType:tableType]; } // 以秒为单位的时间戳 - (NSInteger)currentGMTStyleTimeStamp { - return [NSDate pct_currentTimestamp]/1000; + return [NSDate HCT_currentTimestamp]/1000; } #pragma mark-- 数据库操作 @@ -2276,13 +2276,13 @@ NS_INLINE NSString *PCTGetTableNameFromType(PCTLogTableType type) { - Wi-Fi 的时候都上报 - 不为 Wi-Fi 的时候:onlyWifi 为 false 的类型进行上报 */ -- (void)assembleDataInTable:(PCTLogTableType)tableType networkType:(NetworkingManagerStatusType)networkType completion:(void (^)(NSArray *records))completion { +- (void)assembleDataInTable:(HCTLogTableType)tableType networkType:(NetworkingManagerStatusType)networkType completion:(void (^)(NSArray *records))completion { // 1. 获取到合适的 Crash 类型的数据 [self fetchCrashDataByCount:self.configureModel.maxFlowMByte inTable:tableType upperBound:self.configureModel.maxBodyMByte - completion:^(NSArray *records) { - NSArray *crashData = records; + completion:^(NSArray *records) { + NSArray *crashData = records; // 2. 计算剩余需要的数据条数和剩余需要的数据大小 NSInteger remainingCount = self.configureModel.maxItem - crashData.count; float remainingSize = self.configureModel.maxBodyMByte - [self calculateDataSize:crashData]; @@ -2292,8 +2292,8 @@ NS_INLINE NSString *PCTGetTableNameFromType(PCTLogTableType type) { inTable:tableType upperBound:remainingSize isWiFI:isWifi - completion:^(NSArray *records) { - NSArray *dataExceptCrash = records; + completion:^(NSArray *records) { + NSArray *dataExceptCrash = records; NSMutableArray *dataSource = [NSMutableArray array]; [dataSource addObjectsFromArray:crashData]; @@ -2309,13 +2309,13 @@ NS_INLINE NSString *PCTGetTableNameFromType(PCTLogTableType type) { - (NSArray *)fetchDataCanUploadPayload:(NSArray *)datasource { __weak typeof(self) weakself = self; __block NSMutableArray *array = [NSMutableArray array]; - if (!PCT_IS_CLASS(datasource, NSArray)) { - NSAssert(PCT_IS_CLASS(datasource, NSArray), @"参数必须是数组"); + if (!HCT_IS_CLASS(datasource, NSArray)) { + NSAssert(HCT_IS_CLASS(datasource, NSArray), @"参数必须是数组"); return nil; } [datasource enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL *_Nonnull stop) { - if (PCT_IS_CLASS(obj, PCTLogPayloadModel)) { - PCTLogPayloadModel *payloadModel = (PCTLogPayloadModel *)obj; + if (HCT_IS_CLASS(obj, HCTLogPayloadModel)) { + HCTLogPayloadModel *payloadModel = (HCTLogPayloadModel *)obj; // 判断是否需要上传 payload 信息 if ([weakself needUploadPayload:payloadModel]) { [array addObject:payloadModel]; @@ -2326,13 +2326,13 @@ NS_INLINE NSString *PCTGetTableNameFromType(PCTLogTableType type) { } // 递归获取符合条件的 Crash 数据集合(count < maxItem && size < maxBodySize) -- (void)fetchCrashDataByCount:(NSInteger)count inTable:(PCTLogTableType)tableType upperBound:(NSInteger)size completion:(void (^)(NSArray *records))completion { +- (void)fetchCrashDataByCount:(NSInteger)count inTable:(HCTLogTableType)tableType upperBound:(NSInteger)size completion:(void (^)(NSArray *records))completion { // 1. 先通过接口拿到的 maxItem 数去查询表中的 Crash 数据集合 NSString *queryCrashDataCondition = [NSString stringWithFormat:@"monitor_type = 'appCrash' and is_used = 0 and namespace = '%@'", self.namespace]; - [PCT_DATABASE getRecordsByCount:count + [HCT_DATABASE getRecordsByCount:count condtion:queryCrashDataCondition inTableType:tableType - completion:^(NSArray *_Nonnull records) { + completion:^(NSArray *_Nonnull records) { // 2. Crash 数据集合大小是否超过配置接口拿到的最大包体积(单位M) maxBodySize float dataSize = [self calculateDataSize:records]; @@ -2352,27 +2352,27 @@ NS_INLINE NSString *PCTGetTableNameFromType(PCTLogTableType type) { }]; } -- (void)fetchDataExceptCrash:(NSInteger)count inTable:(PCTLogTableType)tableType upperBound:(float)size isWiFI:(BOOL)isWifi completion:(void (^)(NSArray *records))completion { +- (void)fetchDataExceptCrash:(NSInteger)count inTable:(HCTLogTableType)tableType upperBound:(float)size isWiFI:(BOOL)isWifi completion:(void (^)(NSArray *records))completion { // 1. 根据剩余需要数据条数去查询表中非 Crash 类型的数据集合 __block NSMutableArray *conditions = [NSMutableArray array]; - [self.configureModel.monitorList enumerateObjectsUsingBlock:^(PCTItemModel * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { + [self.configureModel.monitorList enumerateObjectsUsingBlock:^(HCTItemModel * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { if (isWifi) { if (![obj.type isEqualToString:@"appCrash"]) { [conditions addObject:[NSString stringWithFormat:@"'%@'", obj.type]]; } } else { if (!obj.onlyWifi && ![obj.type isEqualToString:@"appCrash"]) { - [conditions addObject:[NSString stringWithFormat:@"'%@'", PCT_SAFE_STRING(obj.type)]]; + [conditions addObject:[NSString stringWithFormat:@"'%@'", HCT_SAFE_STRING(obj.type)]]; } } }]; NSString *queryCrashDataCondition = [NSString stringWithFormat:@"monitor_type in (%@) and is_used = 0 and namespace = '%@'", [conditions componentsJoinedByString:@","], self.namespace]; // 2. 根据是否有 Wifi 查找对应的数据 - [PCT_DATABASE getRecordsByCount:count + [HCT_DATABASE getRecordsByCount:count condtion:queryCrashDataCondition inTableType:tableType - completion:^(NSArray *_Nonnull records) { + completion:^(NSArray *_Nonnull records) { // 3. 非 Crash 类型的数据集合大小是否超过剩余需要的数据大小 float dataSize = [self calculateDataSize:records]; @@ -2395,42 +2395,42 @@ NS_INLINE NSString *PCTGetTableNameFromType(PCTLogTableType type) { #pragma mark - getters and setters -- (PCTRequestFactory *)requester { +- (HCTRequestFactory *)requester { if (!_requester) { - _requester = [[PCTRequestFactory alloc] init]; + _requester = [[HCTRequestFactory alloc] init]; } return _requester; } - (NSNumber *)currentTimestamp { if (!_currentTimestamp) { - NSInteger currentTimestampValue = [[NSUserDefaults standardUserDefaults] integerForKey:PCT_SAVED_TIMESTAMP]; + NSInteger currentTimestampValue = [[NSUserDefaults standardUserDefaults] integerForKey:HCT_SAVED_TIMESTAMP]; _currentTimestamp = [NSNumber numberWithInteger:currentTimestampValue]; } return _currentTimestamp; } - (void)setCurrentTimestamp:(NSNumber *)currentTimestamp { - [[NSUserDefaults standardUserDefaults] setInteger:[currentTimestamp integerValue] forKey:PCT_SAVED_TIMESTAMP]; + [[NSUserDefaults standardUserDefaults] setInteger:[currentTimestamp integerValue] forKey:HCT_SAVED_TIMESTAMP]; _currentTimestamp = currentTimestamp; } - (NSNumber *)currentFlow { if (!_currentFlow) { - float currentFlowValue = [[NSUserDefaults standardUserDefaults] floatForKey:PCT_SAVED_FLOW]; + float currentFlowValue = [[NSUserDefaults standardUserDefaults] floatForKey:HCT_SAVED_FLOW]; _currentFlow = [NSNumber numberWithFloat:currentFlowValue]; } return _currentFlow; } - (void)setCurrentFlow:(NSNumber *)currentFlow { - [[NSUserDefaults standardUserDefaults] setFloat:[currentFlow floatValue] forKey:PCT_SAVED_FLOW]; + [[NSUserDefaults standardUserDefaults] setFloat:[currentFlow floatValue] forKey:HCT_SAVED_FLOW]; _currentFlow = currentFlow; } -- (PCTConfigurationModel *)configureModel +- (HCTConfigurationModel *)configureModel { - return [[PCTConfigurationService sharedInstance] getConfigurationWithNamespace:self.namespace]; + return [[HCTConfigurationService sharedInstance] getConfigurationWithNamespace:self.namespace]; } - (NSString *)requestBaseUrl diff --git a/Chapter5 - Network/5.3.md b/Chapter5 - Network/5.3.md index a896c0b..7684206 100644 --- a/Chapter5 - Network/5.3.md +++ b/Chapter5 - Network/5.3.md @@ -196,16 +196,16 @@ BSD Socket 提供了转换函数 // 2.1. 遍历拼接model,取出 meta,用 \n 拼接 [rawArray enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { - if (PCT_IS_CLASS(obj, PCTLogPayloadModel)) { + if (HCT_IS_CLASS(obj, HCTLogPayloadModel)) { - PCTLogPayloadModel *payloadModel = (PCTLogPayloadModel *)obj; + HCTLogPayloadModel *payloadModel = (HCTLogPayloadModel *)obj; BOOL shouldAppendLineBreakSymbol = idx < (rawArray.count - 1); [metaStrings appendString:[NSString stringWithFormat:@"%@%@", payloadModel.meta, shouldAppendLineBreakSymbol ? @"\n" : @""]]; // 2.2 判断是否需要上传 payload 信息。如果需要则将 payload 取出。(Payload 可能为空) if ([self needUploadPayload:payloadModel]) { if (payloadModel.payload) { - NSData *payloadData = [PCTDataSerializer compressAndEncryptWithData:payloadModel.payload]; + NSData *payloadData = [HCTDataSerializer compressAndEncryptWithData:payloadModel.payload]; [payloads addObject:payloadData]; } } @@ -216,7 +216,7 @@ BSD Socket 提供了转换函数 return nil; } - NSData *metaData = [PCTDataSerializer compressAndEncryptWithString:metaStrings]; + NSData *metaData = [HCTDataSerializer compressAndEncryptWithString:metaStrings]; __block NSMutableData *headerData = [NSMutableData data]; unsigned short metaLength = (unsigned short)metaData.length;