Splunk MINT SDK for iOS (Legacy)

Splunk MINT SDK for iOS Developer Guide

Acrobat logo Download manual as PDF


Splunk MINT is no longer available for purchase as of January 29, 2021. Customers who have already been paying to ingest and process MINT data in Splunk Enterprise will continue to receive support until December 31, 2021, which is End of Life for all MINT products: App, Web Service (Management Console), SDK and Add-On.
This documentation does not apply to the most recent version of Splunk MINT SDK for iOS (Legacy). For documentation on the most recent version, go to the latest release.
Acrobat logo Download topic as PDF

Monitor transactions

Monitor transactions

Transactions let you keep track of any process inside your application with a beginning and an end. For example, a transaction could be a process such as registration, login, or a purchase.

A transaction is basically an event that starts and then finishes in one of three ways:

  • The transaction is completed normally, resulting in a status of "SUCCESS".
  • The transaction is cancelled by the user, possibly because the process took too much time to complete, resulting in a status of "CANCEL".
  • The transaction failed because the app crashed, resulting in a status of "FAIL".

Use the following methods to work with transactions.

  • To start a transaction, use the transactionStart: method.
  • To stop a transaction, use the transactionStop: method.
  • To cancel a transaction with a reason, use the transactionCancel:reason: method.

Only one instance of a transaction can run at a time for an individual user session. If you start a transaction with the same name as one that is already running, the new instance overwrites the first instance of the transaction.

To identify slow transactions that negatively affect the user experience, monitor how long transactions take to complete by going to the Transactions dashboard in Splunk MINT Management Console.

Example code

// Objective-C
// You should avoid using commas in naming your transaction
NSString* transactionName = @"TransactionName";
[[Mint sharedInstance] transactionStart:transactionName andResultBlock:^(TransactionStartResult *transactionStartResult)
{
    NSString* message = [NSString stringWithFormat:@"Transaction with Name:%@ %@", transactionName, transactionStartResult.transactionStatus == SuccessfullyStartedTransaction ? @"started successfully" : @"failed to start"];
    NSLog(@"%@", message);
}];
// Continue your code...
// Do something in a block method. End the transaction so you can track that
// in your dashboard to resolve an issue or for monitoring.
[[Mint sharedInstance] transactionStop:transactionName andResultBlock:^(TransactionStopResult *transactionStopResult)
{
    NSString* message = [NSString stringWithFormat:@"Transaction with Name:%@ %@", transactionName, transactionStopResult.transactionStatus == UserSuccessfullyStoppedTransaction ? @"stopped successfully" : @"failed to stop"];
    NSLog(@"%@", message);
}];
// Swift 

let transactionName:String = "TransactionName"
Mint.sharedInstance().transactionStart(transactionName) { (transactionStartResult) -> Void in
         let result = transactionStartResult.transactionStatus.rawValue 
              ==    SuccessfullyStartedTransaction.rawValue ? "OK" : "Failed"
         print("Transaction Started: \(result)")
 }
        
Mint.sharedInstance().transactionStop(transactionName) { (transactionStopResult) -> Void in
        let result = transactionStopResult.transactionStatus.rawValue 
             ==  UserSuccessfullyStoppedTransaction.rawValue ? "OK" : "Failed"
        print("Transaction Stopped: \(result)")
}

Add custom data to transactions

You can add extra custom data to specific transactions as a list or as a key-value pair. Custom data can only be viewed using the Splunk MINT App.

Example code

// Objective-C

NSString *transactionName = @"TransactionName";
[[Mint sharedInstance] transactionStart:transactionName extraDataKey:@"test" extraDataValue:@"testvalue" andResultBlock:^(TransactionStartResult *result)
    { NSString *resultState = result.transactionStatus? @"Success": @"Failed"; NSLog(@"Transaction Result:%@", resultState); } 
];


NSString *transactionName = @"TransactionName";
LimitedExtraDataList* extraDataList = [LimitedExtraDataList new];
[extraDataList addWithKey:@"Extra Key1" andValue:@"Extra Value1"];
[extraDataList addWithKey:@"Extra Key2" andValue:@"Extra Value2"];
[[Mint sharedInstance] transactionStart:transactionName limitedExtraDataList:extraDataList andResultBlock:^(TransactionStartResult *result)
    { NSString *resultState = result.transactionStatus? @"Success": @"Failed"; NSLog(@"Transaction Result:%@", resultState); } 
];


NSString *transactionName = @"TransactionName";
[[Mint sharedInstance] transactionStop:transactionName extraDataKey:@"test" extraDataValue:@"testvalue" andResultBlock:^(TransactionStopResult *result)
    { NSString *resultState = result.transactionStatus? @"Success": @"Failed"; NSLog(@"Transaction Result:%@", resultState); } 
];

NSString *transactionName = @"TransactionName";
LimitedExtraDataList* extraDataList = [LimitedExtraDataList new];
[extraDataList addWithKey:@"Extra Key1" andValue:@"Extra Value1"];
[extraDataList addWithKey:@"Extra Key2" andValue:@"Extra Value2"];
[[Mint sharedInstance] transactionStop:transactionName limitedExtraDataList:extraDataList andResultBlock:^(TransactionStopResult *result)
    { NSString *resultState = result.transactionStatus? @"Success": @"Failed"; NSLog(@"Transaction Result:%@", resultState); } 
];

NSString *transactionName = @"TransactionName";
[self.mint transactionCancel:transactionName extraDataKey:@"Extra Key1" extraDataValue:@"Extra Value1" reason:nil andResultBlock:^(TransactionStopResult *transactionStopResult)
    { NSString* message = [NSString stringWithFormat:@"Transaction with Name:%@ %@", transactionName, transactionStopResult.transactionStatus == UserSuccessfullyStoppedTransaction ? @"stopped successfully" : @"failed to stop"]; NSLog(@"%@", message); } 
];

NSString *transactionName = @"TransactionName";
LimitedExtraDataList* extraDataList = [LimitedExtraDataList new];
[extraDataList addWithKey:@"Extra Key1" andValue:@"Extra Value1"];
[extraDataList addWithKey:@"Extra Key2" andValue:@"Extra Value2"];
[[Mint sharedInstance] transactionCancel:transactionName limitedExtraDataList:extraDataList reason:@"any reason" andResultBlock:^(TransactionStopResult *transactionStopResult)
    { NSString* message = [NSString stringWithFormat:@"Transaction with Name:%@ %@", transactionName, transactionStopResult.transactionStatus == UserSuccessfullyStoppedTransaction ? @"stopped successfully" : @"failed to stop"]; NSLog(@"%@", message); } 
];
// Swift

var transactionName:String = "TransactionName"
Mint.sharedInstance().transactionStart(transactionName, extraDataKey: "test", extraDataValue: "testvalue") { (transactionResult) -> Void in
    let result = transactionResult.transactionStatus.rawValue == OKResultState.rawValue ? "OK":"Failed"
    print("Transaction Result:\(result)")
}

var transactionName:String = "TransactionName"
var dataList:LimitedExtraDataList = LimitedExtraDataList()
dataList.addWithKey("test1", andValue: "testvalue1")
dataList.addWithKey("test2", andValue: "testvalue2")
Mint.sharedInstance().transactionStart(transactionName, limitedExtraDataList: dataList) { (transactionResult) -> Void in
    let result = transactionResult.transactionStatus.rawValue == OKResultState.rawValue ? "OK":"Failed"
    print("Transaction Result:\(result)")
}

var transactionName:String = "TransactionName"
Mint.sharedInstance().transactionStop(transactionName, extraDataKey: "test", extraDataValue: "testvalue")
    { (transactionResult:TransactionStopResult!) -> Void in
        let result = transactionResult.transactionStatus.rawValue == OKResultState.rawValue ? "OK":"Failed"
        print("Transaction Result:\(result)")
}

var transactionName:String = "TransactionName"
var dataList:LimitedExtraDataList = LimitedExtraDataList()
dataList.addWithKey("test1", andValue: "testvalue1")
dataList.addWithKey("test2", andValue: "testvalue2")
Mint.sharedInstance().transactionStop(transactionName, limitedExtraDataList: dataList) { (transactionResult:TransactionStopResult!) -> Void in
    let result = transactionResult.transactionStatus.rawValue == OKResultState.rawValue ? "OK":"Failed"
    print("Transaction Result:\(result)")
}

var transactionName:String = "TransactionName"
Mint.sharedInstance().transactionCancel(transactionName, extraDataKey: "test", extraDataValue: "testValue", reason: "Any reason") { (transactionResult) -> Void in
    let result = transactionResult.transactionStatus.rawValue == OKResultState.rawValue ? "OK":"Failed"
    print("Transaction Result:\(result)")
}

var transactionName:String = "TransactionName"
var dataList:LimitedExtraDataList = LimitedExtraDataList()
dataList.addWithKey("test1", andValue: "testvalue1")
dataList.addWithKey("test2", andValue: "testvalue2")
Mint.sharedInstance().transactionCancel(transactionName, limitedExtraDataList: dataList, reason: "any reason") { (transactionResult) -> Void in
    let result = transactionResult.transactionStatus.rawValue == OKResultState.rawValue ? "OK":"Failed"
    print("Transaction Result:\(result)")
}

View custom data

To view the custom data for transactions, open the Splunk MINT App and run a search. For example, the following search lists the names of started transactions with the values of the custom "member" field:

sourcetype=mint:trstart extraData.member=* | table tr_name, extraData.member

For more about running searches in MINT, see Searches in the Splunk MINT App User Guide.

Last modified on 03 February, 2016
PREVIOUS
Customize session handling
  NEXT
Add and report events

This documentation applies to the following versions of Splunk MINT SDK for iOS (Legacy): 4.1.x, 4.2.x, 4.3.x, 4.4.x


Was this documentation topic helpful?


You must be logged into splunk.com in order to post comments. Log in now.

Please try to keep this discussion focused on the content covered in this documentation topic. If you have a more general question about Splunk functionality or are experiencing a difficulty with Splunk, consider posting a question to Splunkbase Answers.

0 out of 1000 Characters