Skip to content

Commit

Permalink
added logic for backoff when dataplane wrong
Browse files Browse the repository at this point in the history
  • Loading branch information
ruchiramoitra committed Aug 20, 2020
1 parent 55cb09b commit a9e52d5
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 9 deletions.
4 changes: 2 additions & 2 deletions Example/Rudder/_AppDelegate.m
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@

static NSString *DATA_PLANE_URL = @"https://7203f5894e2f.ngrok.io";
static NSString *CONTROL_PLANE_URL = @"https://98a1db41.ngrok.io";
static NSString *WRITE_KEY = @"1ZTkZgCMnZyXeWsFbcjGsOx4jnv";
static NSString *WRITE_KEY = @"1fG4PQTMJpujRfSmAhgv3IcN9Cb";
//static WKWebView *webView;

@implementation _AppDelegate
Expand All @@ -21,7 +21,7 @@ - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(
{
// Override point for customization after application launch.
RSConfigBuilder *builder = [[RSConfigBuilder alloc] init];
[builder withDataPlaneURL:[[NSURL alloc] initWithString:DATA_PLANE_URL]];
// [builder withDataPlaneURL:[[NSURL alloc] initWithString:DATA_PLANE_URL]];
[builder withLoglevel:RSLogLevelDebug];
[builder withTrackLifecycleEvens:YES];
[builder withRecordScreenViews:YES];
Expand Down
30 changes: 23 additions & 7 deletions Rudder/Classes/RSEventRepository.m
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,11 @@
static RSEventRepository* _instance;

@implementation RSEventRepository
typedef enum {
NETWORKERROR =1,
NETWORKSUCCESS =0,
WRONGWRITEKEY =2
} NETWORKSTATE;

+ (instancetype)initiate:(NSString *)writeKey config:(RSConfig *) config {
if (_instance == nil) {
Expand Down Expand Up @@ -160,7 +165,7 @@ - (void) __initiateFactories : (NSArray*) destinations {
- (void) __initiateProcessor {
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
[RSLogger logDebug:@"processor started"];

int errResp = 0;
int sleepCount = 0;

while (YES) {
Expand All @@ -180,18 +185,25 @@ - (void) __initiateProcessor {
[RSLogger logDebug:[[NSString alloc] initWithFormat:@"Payload: %@", payload]];
[RSLogger logInfo:[[NSString alloc] initWithFormat:@"EventCount: %lu", (unsigned long)dbMessage.messageIds.count]];
if (payload != nil) {
NSString* response = [self __flushEventsToServer:payload];
[RSLogger logInfo:[[NSString alloc] initWithFormat:@"Response: %@", response]];
if (response != nil && [response isEqual: @"OK"]) {
int response = [self __flushEventsToServer:payload];
if (response == 0) {
[RSLogger logDebug:@"clearing events from DB"];
[self->dbpersistenceManager clearEventsFromDB:dbMessage.messageIds];
sleepCount = 0;
}
else if(response == 1){
errResp = 1;
}
}
}
[RSLogger logDebug:[[NSString alloc] initWithFormat:@"SleepCount: %d", sleepCount]];
sleepCount += 1;
if (errResp == 1){
[RSLogger logDebug:[[NSString alloc] initWithFormat:@"Retrying in: %d", sleepCount*1000000]];
usleep(sleepCount*1000000);
}else{
usleep(1000000);
}
}
});
}
Expand Down Expand Up @@ -237,15 +249,15 @@ - (NSString*) __getPayloadFromMessages: (RSDBMessage*)dbMessage{
return [json copy];
}

- (NSString* _Nullable) __flushEventsToServer: (NSString*) payload {
- (int) __flushEventsToServer: (NSString*) payload {
if (self->authToken == nil || [self->authToken isEqual:@""]) {
[RSLogger logError:@"WriteKey was not correct. Aborting flush to server"];
return nil;
}

dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);

__block NSString *responseStr = nil;
int __block responseStr = NETWORKSUCCESS;
NSString *dataPlaneEndPoint = [self->config.dataPlaneUrl stringByAppendingString:@"/v1/batch"];
[RSLogger logDebug:[[NSString alloc] initWithFormat:@"endPointToFlush %@", dataPlaneEndPoint]];

Expand All @@ -265,10 +277,14 @@ - (NSString* _Nullable) __flushEventsToServer: (NSString*) payload {

if (httpResponse.statusCode == 200) {
if (data != nil) {
responseStr = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
NSString *response = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
if([response isEqual:@"OK"]){
responseStr = NETWORKSUCCESS;
}
}
} else {
NSString *errorResponse = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
responseStr = NETWORKERROR;
[RSLogger logError:[[NSString alloc] initWithFormat:@"ServerError: %@", errorResponse]];
}

Expand Down

0 comments on commit a9e52d5

Please sign in to comment.