class FyipeTracker

Public Class Methods

new(apiUrl, errorTrackerId, errorTrackerKey, options = []) click to toggle source

FyipeTracker constructor. @param string apiUrl @param string errorTrackerId @param string errorTrackerKey

# File lib/fyipeTracker.rb, line 12
def initialize(apiUrl, errorTrackerId, errorTrackerKey, options = [])
    # instance variable intialzation
    @configKeys = ['baseUrl']
    @MAX_ITEMS_ALLOWED_IN_STACK = 100
    @errorTrackerId = errorTrackerId
    setApiUrl(apiUrl) 
    @errorTrackerKey = errorTrackerKey
    @tags = []
    @fingerprint = []
    @options = {
        'maxTimeline': 5,
        'captureCodeSnippet': true
    }
    setUpOptions(options)
    @util = Util.new(@options)
    setEventId()
    @listenerObj = FyipeListener.new(getEventId(), @options)
    @apiTransport = FyipeTransport.new(@apiUrl)
    setUpExceptionHandlerListener()
end

Public Instance Methods

addToTimeline(category, content, type) click to toggle source
# File lib/fyipeTracker.rb, line 78
def addToTimeline(category, content, type)
    timelineObj =  {}
    timelineObj["category"] = category
    timelineObj["data"] = content
    timelineObj["type"] = type

    @listenerObj.logCustomTimelineEvent(timelineObj)
end
captureException(exception) click to toggle source
# File lib/fyipeTracker.rb, line 219
def captureException(exception)

    # construct the error object
    exceptionObj = @util.getExceptionStackTrace(exception)

    # set the a handled tag
    setTag('handled', 'true')

    prepareErrorObject('exception', exceptionObj)

    # send to the server
    return sendErrorEventToServer()
end
captureMessage( message) click to toggle source
# File lib/fyipeTracker.rb, line 160
def captureMessage( message)
    # set the a handled tag
    setTag('handled', 'true')
    messageObj = {}
    messageObj["message"] = message 

    prepareErrorObject('message', messageObj);

    # send to the server
    return sendErrorEventToServer()
end
clear(newEventId) click to toggle source
# File lib/fyipeTracker.rb, line 243
def clear(newEventId)
    # clear tags
    @tags = []
    # clear fingerprint
    @fingerprint = []
    # clear timeline
    @listenerObj.clearTimeline(newEventId)
end
getCurrentEvent() click to toggle source
# File lib/fyipeTracker.rb, line 215
def getCurrentEvent()
    return @event
end
getEventId() click to toggle source
# File lib/fyipeTracker.rb, line 74
def getEventId()
    return @eventId
end
getFingerprint(errorMessage) click to toggle source
# File lib/fyipeTracker.rb, line 149
def getFingerprint(errorMessage)

    # if no fingerprint exist currently
    if (@fingerprint.length() < 1)
        # set up finger print based on error since none exist
        setFingerPrint(errorMessage)
    end
    
    return @fingerprint
end
getSDKDetails() click to toggle source
# File lib/fyipeTracker.rb, line 252
def getSDKDetails()    
    # default sdk details
    sdkDetail = {}
    sdkDetail["name"] = Fyipe::NAME
    sdkDetail["version"] = Fyipe::VERSION

    
    return sdkDetail
end
getTags() click to toggle source
# File lib/fyipeTracker.rb, line 128
def getTags()
    return @tags
end
getTimeline() click to toggle source
# File lib/fyipeTracker.rb, line 87
def getTimeline()
    return @listenerObj.getTimeline()
end
manageErrorObject(exception) click to toggle source
# File lib/fyipeTracker.rb, line 179
def manageErrorObject(exception)

    # construct the error object
    errorObj = @utilObj.getExceptionStackTrace(exception);
    
    # set the a handled tag
    setTag('handled', 'false');
    # prepare to send to server
    prepareErrorObject('error', errorObj);

    # send to the server
    return sendErrorEventToServer();
end
prepareErrorObject(eventType, errorStackTrace) click to toggle source
# File lib/fyipeTracker.rb, line 192
def prepareErrorObject(eventType, errorStackTrace) 
    # set a last timeline as the error message
    @listenerObj.logErrorEvent(errorStackTrace["message"], eventType)
    
    # get current timeline
    timeline = getTimeline()
    
    tags = getTags()
    fingerprint = getFingerprint(errorStackTrace["message"]) # default fingerprint will be the message from the error stacktrace
    # get event ID
    # Temporary display the state of the error stack, timeline and device details when an error occur
    # prepare the event so it can be sent to the server
    @event = {}
    @event["type"] = eventType
    @event["timeline"]= timeline
    @event["exception"]= errorStackTrace
    @event["eventId"]= getEventId()
    @event["tags"]= tags
    @event["fingerprint"]= fingerprint
    @event["errorTrackerKey"]= @errorTrackerKey
    @event["sdk"]= getSDKDetails()
end
sendErrorEventToServer() click to toggle source
# File lib/fyipeTracker.rb, line 232
def sendErrorEventToServer()
    response = nil
    # send to API properly
    response = @apiTransport.sendErrorEventToServer(@event)
    # generate a new event Id
    setEventId()
    # clear the timeline after a successful call to the server
    clear(getEventId())
    return response
end
setApiUrl(apiUrl) click to toggle source
# File lib/fyipeTracker.rb, line 33
def setApiUrl(apiUrl)
    @apiUrl = apiUrl + '/error-tracker/' + @errorTrackerId + '/track';
end
setEventId() click to toggle source
# File lib/fyipeTracker.rb, line 70
def setEventId()
    @eventId = @util.v4()
end
setFingerPrint(key) click to toggle source
# File lib/fyipeTracker.rb, line 132
def setFingerPrint(key)
    # get data type of the passed key
    keyClassType = key.class.to_s

    # routine check
    if (keyClassType != "String" && keyClassType != "Array")
        raise "Invalid Fingerprint"
    end

    fingerprint = key
    if (keyClassType == "String")
        fingerprint = [key]
    end
    
    @fingerprint = fingerprint
end
setTag(key, value) click to toggle source
# File lib/fyipeTracker.rb, line 91
def setTag(key, value)
    if (!((key.class.to_s.eql? "String") || (value.class.to_s.eql? "String")))
        raise "Invalid Tag"
    end
    
    exist = false
    @tags.each do |tag|
        if(tag['key'].to_s.eql? key)
            # set the found flag
            exist = true
            # replace value if it exist
            tag['value'] = value
            break
        end
    end
    if(!exist)
        # push key and value if it doesnt
        tag = {}
        tag['key'] = key
        tag['value'] = value
        @tags.append(tag)
    end
end
setTags(tags) click to toggle source
# File lib/fyipeTracker.rb, line 115
def setTags(tags)

    if (!(tags.class.to_s.eql? "Array"))
        raise "Invalid Tags"
    end
    
    tags.each do |tag|
        if(tag[:key] != nil && tag[:value] != nil)
            setTag(tag[:key], tag[:value])
        end
    end
end
setUpExceptionHandlerListener() click to toggle source
# File lib/fyipeTracker.rb, line 172
def setUpExceptionHandlerListener()
    # start listener
    at_exit do
        manageErrorObject($!) if $!         
    end
    
end
setUpOptions(options) click to toggle source
# File lib/fyipeTracker.rb, line 37
def setUpOptions(options)
    # set up options
    if(options.class.to_s != "Hash")
        return # ignore passed options if it is not an object
    end

    options.each do |key, value|
        # proceed with current key if it is not in the config keys
         if (!(@configKeys.include? key))
            # if key is allowed in options
            if (@options[key] != nil)
                # set max timeline properly after hecking conditions
                if key.to_s == 'maxTimeline'
                    allowedValue = value
                    if value > @MAX_ITEMS_ALLOWED_IN_STACK or value < 1
                        allowedValue = @MAX_ITEMS_ALLOWED_IN_STACK
                    end
                    
                    @options[key] = allowedValue
                elsif key.to_s == 'captureCodeSnippet'
                        defaultVal = true
                        # set boolean value if boolean or set default `true` if anything other than boolean is passed
                        if [true, false].include? value # since there is no Boolean class in Ruby
                            defaultVal = value
                        end
                        @options[key] = defaultVal
                end
            end

         end
    end
end