Skip to content

Commit

Permalink
feat: data validity period (#310)
Browse files Browse the repository at this point in the history
* feat: data validity period

* style: code format

* ci: update unit-testing

---------

Co-authored-by: GIOSDK <sdk-integration@growingio.com>
  • Loading branch information
YoloMao and GIOSDK committed Apr 30, 2024
1 parent f2f032b commit a52fefa
Show file tree
Hide file tree
Showing 9 changed files with 43 additions and 82 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -129,6 +129,7 @@ - (void)testDefaultConfiguration_Autotracker {
XCTAssertEqual(configuration.impressionScale, 0);
XCTAssertEqualObjects(configuration.dataSourceId, nil);
XCTAssertEqualObjects(configuration.networkConfig, nil);
XCTAssertEqual(configuration.dataValidityPeriod, 7);
}

- (void)testSetConfiguration_Autotracker {
Expand All @@ -151,6 +152,14 @@ - (void)testSetConfiguration_Autotracker {
GrowingNetworkConfig *networkConfig = [GrowingNetworkConfig config];
networkConfig.requestTimeout = 0.3f;
config.networkConfig = networkConfig;

// [3, 30]
config.dataValidityPeriod = 2;
XCTAssertEqual(config.dataValidityPeriod, 3);
config.dataValidityPeriod = 31;
XCTAssertEqual(config.dataValidityPeriod, 30);
config.dataValidityPeriod = 20;

[GrowingRealAutotracker trackerWithConfiguration:config launchOptions:nil];

GrowingAutotrackConfiguration *configuration =
Expand All @@ -172,6 +181,7 @@ - (void)testSetConfiguration_Autotracker {
XCTAssertEqualObjects(configuration.dataSourceId, @"12345");
XCTAssertNotNil(configuration.networkConfig);
XCTAssertEqual(configuration.networkConfig.requestTimeout, 0.3f);
XCTAssertEqual(configuration.dataValidityPeriod, 20);
}

- (void)testDefaultConfiguration_Tracker {
Expand All @@ -194,6 +204,7 @@ - (void)testDefaultConfiguration_Tracker {
XCTAssertEqual(configuration.compressEnabled, NO);
XCTAssertEqualObjects(configuration.dataSourceId, nil);
XCTAssertEqualObjects(configuration.networkConfig, nil);
XCTAssertEqual(configuration.dataValidityPeriod, 7);
}

- (void)testSetConfiguration_Tracker {
Expand All @@ -215,6 +226,14 @@ - (void)testSetConfiguration_Tracker {
GrowingNetworkConfig *networkConfig = [GrowingNetworkConfig config];
networkConfig.requestTimeout = 0.3f;
config.networkConfig = networkConfig;

// [3, 30]
config.dataValidityPeriod = 2;
XCTAssertEqual(config.dataValidityPeriod, 3);
config.dataValidityPeriod = 31;
XCTAssertEqual(config.dataValidityPeriod, 30);
config.dataValidityPeriod = 20;

[GrowingRealTracker trackerWithConfiguration:config launchOptions:nil];

GrowingTrackConfiguration *configuration = GrowingConfigurationManager.sharedInstance.trackConfiguration;
Expand All @@ -234,6 +253,7 @@ - (void)testSetConfiguration_Tracker {
XCTAssertEqualObjects(configuration.dataSourceId, @"12345");
XCTAssertNotNil(configuration.networkConfig);
XCTAssertEqual(configuration.networkConfig.requestTimeout, 0.3f);
XCTAssertEqual(configuration.dataValidityPeriod, 20);
}

- (void)testVersionNameAndVersionCode {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -66,44 +66,6 @@ - (void)testDefaultConfiguration_Autotracker {
XCTAssertEqualObjects(configuration.dataSourceId, nil);
}

- (void)testSetConfiguration_Autotracker {
GrowingAutotrackConfiguration *config = [GrowingAutotrackConfiguration configurationWithProjectId:@"test"];
config.debugEnabled = YES;
config.cellularDataLimit = 5;
config.dataUploadInterval = 10;
config.sessionInterval = 10;
config.dataCollectionEnabled = NO;
config.uploadExceptionEnable = NO;
config.dataCollectionServerHost = @"https://autotracker.growingio.com";
config.excludeEvent = 1;
config.ignoreField = 1;
config.idMappingEnabled = YES;
config.urlScheme = @"growing.autotracker";
config.encryptEnabled = YES;
config.compressEnabled = YES;
config.impressionScale = 0.5;
config.dataSourceId = @"12345";
[GrowingRealAutotracker trackerWithConfiguration:config launchOptions:nil];

GrowingAutotrackConfiguration *configuration =
(GrowingAutotrackConfiguration *)GrowingConfigurationManager.sharedInstance.trackConfiguration;
XCTAssertEqual(configuration.debugEnabled, YES);
XCTAssertEqual(configuration.cellularDataLimit, 5);
XCTAssertEqual(configuration.dataUploadInterval, 10);
XCTAssertEqual(configuration.sessionInterval, 10);
XCTAssertEqual(configuration.dataCollectionEnabled, NO);
XCTAssertEqual(configuration.uploadExceptionEnable, NO);
XCTAssertEqualObjects(configuration.dataCollectionServerHost, @"https://autotracker.growingio.com");
XCTAssertEqual(configuration.excludeEvent, 1);
XCTAssertEqual(configuration.ignoreField, 1);
XCTAssertEqual(configuration.idMappingEnabled, YES);
XCTAssertEqualObjects(configuration.urlScheme, @"growing.autotracker");
XCTAssertEqual(configuration.encryptEnabled, YES);
XCTAssertEqual(configuration.compressEnabled, YES);
XCTAssertEqual(configuration.impressionScale, 0.5);
XCTAssertEqualObjects(configuration.dataSourceId, @"12345");
}

- (void)testDefaultConfiguration_Tracker {
GrowingTrackConfiguration *config = [GrowingTrackConfiguration configurationWithProjectId:@"test"];
[GrowingRealTracker trackerWithConfiguration:config launchOptions:nil];
Expand All @@ -125,39 +87,4 @@ - (void)testDefaultConfiguration_Tracker {
XCTAssertEqualObjects(configuration.dataSourceId, nil);
}

- (void)testSetConfiguration_Tracker {
GrowingTrackConfiguration *config = [GrowingTrackConfiguration configurationWithProjectId:@"test"];
config.debugEnabled = YES;
config.cellularDataLimit = 5;
config.dataUploadInterval = 10;
config.sessionInterval = 10;
config.dataCollectionEnabled = NO;
config.uploadExceptionEnable = NO;
config.dataCollectionServerHost = @"https://tracker.growingio.com";
config.excludeEvent = 1;
config.ignoreField = 1;
config.idMappingEnabled = YES;
config.urlScheme = @"growing.tracker";
config.encryptEnabled = YES;
config.compressEnabled = YES;
config.dataSourceId = @"12345";
[GrowingRealTracker trackerWithConfiguration:config launchOptions:nil];

GrowingTrackConfiguration *configuration = GrowingConfigurationManager.sharedInstance.trackConfiguration;
XCTAssertEqual(configuration.debugEnabled, YES);
XCTAssertEqual(configuration.cellularDataLimit, 5);
XCTAssertEqual(configuration.dataUploadInterval, 10);
XCTAssertEqual(configuration.sessionInterval, 10);
XCTAssertEqual(configuration.dataCollectionEnabled, NO);
XCTAssertEqual(configuration.uploadExceptionEnable, NO);
XCTAssertEqualObjects(configuration.dataCollectionServerHost, @"https://tracker.growingio.com");
XCTAssertEqual(configuration.excludeEvent, 1);
XCTAssertEqual(configuration.ignoreField, 1);
XCTAssertEqual(configuration.idMappingEnabled, YES);
XCTAssertEqualObjects(configuration.urlScheme, @"growing.tracker");
XCTAssertEqual(configuration.encryptEnabled, YES);
XCTAssertEqual(configuration.compressEnabled, YES);
XCTAssertEqualObjects(configuration.dataSourceId, @"12345");
}

@end
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ - (void)testDatabaseInstanceMethods {
XCTAssertNotNil(database.db);

// clean expired event if need
XCTAssertEqual(database.cleanExpiredEventIfNeeded, YES);
XCTAssertEqual([database cleanExpiredEventIfNeeded:1], YES);

// clear all events
XCTAssertEqual(database.clearAllEvents, YES);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ - (void)testDatabaseInstanceMethods {
XCTAssertNotNil(database.db);

// clean expired event if need
XCTAssertEqual(database.cleanExpiredEventIfNeeded, YES);
XCTAssertEqual([database cleanExpiredEventIfNeeded:1], YES);

// clear all events
XCTAssertEqual(database.clearAllEvents, YES);
Expand Down
5 changes: 3 additions & 2 deletions GrowingTrackerCore/Database/GrowingEventDatabase.m
Original file line number Diff line number Diff line change
Expand Up @@ -18,11 +18,11 @@
// limitations under the License.

#import "GrowingTrackerCore/Database/GrowingEventDatabase.h"
#import "GrowingTrackerCore/Manager/GrowingConfigurationManager.h"
#import "GrowingTrackerCore/Public/GrowingServiceManager.h"
#import "GrowingTrackerCore/Thirdparty/Logger/GrowingLogger.h"
#import "GrowingTrackerCore/Utils/GrowingInternalMacros.h"

long long const GrowingEventDatabaseExpirationTime = 86400000 * 7;
NSString *const GrowingEventDatabaseErrorDomain = @"com.growing.event.database.error";

@interface GrowingEventDatabase ()
Expand Down Expand Up @@ -158,7 +158,8 @@ - (BOOL)clearAllItems {
}

- (BOOL)cleanExpiredDataIfNeeded {
BOOL result = [self.db cleanExpiredEventIfNeeded];
GrowingTrackConfiguration *trackConfiguration = GrowingConfigurationManager.sharedInstance.trackConfiguration;
BOOL result = [self.db cleanExpiredEventIfNeeded:trackConfiguration.dataValidityPeriod];

if (!result) {
[self handleDatabaseError:[self.db lastError]];
Expand Down
12 changes: 12 additions & 0 deletions GrowingTrackerCore/GrowingTrackConfiguration.m
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,7 @@ - (instancetype)initWithAccountId:(NSString *)accountId {
_compressEnabled = NO;
_networkConfig = nil;
_useProtobuf = YES;
_dataValidityPeriod = 7;

// Ads
_ASAEnabled = NO;
Expand Down Expand Up @@ -109,6 +110,7 @@ - (id)copyWithZone:(NSZone *)zone {
configuration->_compressEnabled = _compressEnabled;
configuration->_networkConfig = [_networkConfig copy];
configuration->_useProtobuf = _useProtobuf;
configuration->_dataValidityPeriod = _dataValidityPeriod;

// Ads
configuration->_ASAEnabled = _ASAEnabled;
Expand Down Expand Up @@ -142,4 +144,14 @@ - (void)setSessionInterval:(NSTimeInterval)sessionInterval {
_sessionInterval = sessionInterval;
}

- (void)setDataValidityPeriod:(NSUInteger)dataValidityPeriod {
// period range is [3, 30]
if (dataValidityPeriod < 3) {
dataValidityPeriod = 3;
} else if (dataValidityPeriod > 30) {
dataValidityPeriod = 30;
}
_dataValidityPeriod = dataValidityPeriod;
}

@end
6 changes: 3 additions & 3 deletions GrowingTrackerCore/Public/GrowingEventDatabaseService.h
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,6 @@ typedef NS_ENUM(NSInteger, GrowingEventDatabaseError) {
GrowingEventDatabaseCreateDBError, /// 创建数据库错误
};

extern long long const GrowingEventDatabaseExpirationTime;
extern NSString *const GrowingEventDatabaseErrorDomain;

@protocol GrowingEventDatabaseService <NSObject>
Expand Down Expand Up @@ -98,9 +97,10 @@ extern NSString *const GrowingEventDatabaseErrorDomain;
/// @return 写入成功/失败;若返回值为NO,表示写入错误
- (BOOL)clearAllEvents;

/// 清除过期事件,过期时间为GrowingEventDatabaseExpirationTime
/// 清除过期事件
/// @param expirationDays 过期时间,单位 天
/// @return 写入成功/失败;若返回值为NO,表示写入错误
- (BOOL)cleanExpiredEventIfNeeded;
- (BOOL)cleanExpiredEventIfNeeded:(NSUInteger)expirationDays;

/// 获取数据库错误信息
/// @return NSError对象,在上方函数出错时,自行按照如下方式拼接
Expand Down
1 change: 1 addition & 0 deletions GrowingTrackerCore/Public/GrowingTrackConfiguration.h
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@ FOUNDATION_EXPORT NSString *const kGrowingDefaultDataCollectionServerHost;
@property (nonatomic, assign) BOOL compressEnabled;
@property (nonatomic, copy) GrowingNetworkConfig *networkConfig;
@property (nonatomic, assign) BOOL useProtobuf;
@property (nonatomic, assign) NSUInteger dataValidityPeriod;

- (instancetype)initWithAccountId:(NSString *)accountId;

Expand Down
4 changes: 2 additions & 2 deletions Services/Database/GrowingEventFMDatabase.m
Original file line number Diff line number Diff line change
Expand Up @@ -264,9 +264,9 @@ - (BOOL)clearAllEvents {
return result;
}

- (BOOL)cleanExpiredEventIfNeeded {
- (BOOL)cleanExpiredEventIfNeeded:(NSUInteger)expirationDays {
NSNumber *now = [NSNumber numberWithLongLong:([[NSDate date] timeIntervalSince1970] * 1000LL)];
NSNumber *sevenDayBefore = [NSNumber numberWithLongLong:(now.longLongValue - GrowingEventDatabaseExpirationTime)];
NSNumber *sevenDayBefore = [NSNumber numberWithLongLong:(now.longLongValue - expirationDays * 86400000)];

__block BOOL result = NO;
[self performDatabaseBlock:^(GrowingFMDatabase *db, NSError *error) {
Expand Down

0 comments on commit a52fefa

Please sign in to comment.