Modules (188)

HealthLogger

Description

Utilities functions related to Health Data logging

Dependencies

Functions

Public API

clearHealthData

Clears all the health data recorded till now

    function clearHealthData() {
        PreferencesManager.setViewState(HEALTH_DATA_STATE_KEY, {});
        //clear the performance related health data also
        PerfUtils.clear();
    }
Public API

fileOpened

Whenever a file is opened call this function. The function will record the number of times the standard file types have been opened. We only log the standard filetypes

filePath String
The path of the file to be registered
addedToWorkingSet boolean
set to true if extensions of files added to the working set needs to be logged
    function fileOpened(filePath, addedToWorkingSet, encoding) {
        if (!shouldLogHealthData()) {
            return;
        }
        var fileExtension = FileUtils.getFileExtension(filePath),
            language = LanguageManager.getLanguageForPath(filePath),
            healthData = getStoredHealthData(),
            fileExtCountMap = [];
        healthData.fileStats = healthData.fileStats || {
            openedFileExt     : {},
            workingSetFileExt : {},
            openedFileEncoding: {}
        };
        if (language.getId() !== "unknown") {
            fileExtCountMap = addedToWorkingSet ? healthData.fileStats.workingSetFileExt : healthData.fileStats.openedFileExt;
            if (!fileExtCountMap[fileExtension]) {
                fileExtCountMap[fileExtension] = 0;
            }
            fileExtCountMap[fileExtension]++;
            setHealthData(healthData);
        }
        if (encoding) {
            var fileEncCountMap = healthData.fileStats.openedFileEncoding;
            if (!fileEncCountMap) {
                healthData.fileStats.openedFileEncoding = {};
                fileEncCountMap = healthData.fileStats.openedFileEncoding;
            }
            if (!fileEncCountMap[encoding]) {
                fileEncCountMap[encoding] = 0;
            }
            fileEncCountMap[encoding]++;
            setHealthData(healthData);
        }
    }
Public API

getAggregatedHealthData

Return the aggregate of all health data logged till now from all sources

Returns: Object
Health Data aggregated till now
    function getAggregatedHealthData() {
        var healthData = getStoredHealthData();
        $.extend(healthData, PerfUtils.getHealthReport());
        $.extend(healthData, FindUtils.getHealthReport());
        return healthData;
    }
Public API

getHealthDataLog

Returns health data logged for the given key

Returns: Object
Health Data object for the key or undefined if no health data stored
    function getHealthDataLog(key) {
        var healthData = getStoredHealthData();
        return healthData[key];
    }

getStoredHealthData

Return all health data logged till now stored in the state prefs

Returns: Object
Health Data aggregated till now
    function getStoredHealthData() {
        var storedData = PreferencesManager.getViewState(HEALTH_DATA_STATE_KEY) || {};
        return storedData;
    }
Public API

init

Init: creates the health log preference keys in the state.json file

    function init() {
        PreferencesManager.stateManager.definePreference(HEALTH_DATA_STATE_KEY, "object", {});
    }

notifyHealthManagerToSendData

Notifies the HealthData extension to send Analytics Data to server

param{Object}
eventParams Event Data to be sent to Analytics Server
    function notifyHealthManagerToSendData(eventParams) {
        exports.trigger("SendAnalyticsData", eventParams);
    }
Public API

searchDone

Increments health log count for a particular kind of search done

searchType string
The kind of search type that needs to be logged- should be a js var compatible string
    function searchDone(searchType) {
        var searchDetails = getHealthDataLog("searchDetails");
        if (!searchDetails) {
            searchDetails = {};
        }
        if (!searchDetails[searchType]) {
            searchDetails[searchType] = 0;
        }
        searchDetails[searchType]++;
        setHealthDataLog("searchDetails", searchDetails);
    }
Public API

sendAnalyticsData

Send Analytics Data

eventCategory string
The kind of Event Category that needs to be logged- should be a js var compatible string
eventSubCategory string
The kind of Event Sub Category that needs to be logged- should be a js var compatible string
eventType string
The kind of Event Type that needs to be logged- should be a js var compatible string
eventSubType string
The kind of Event Sub Type that needs to be logged- should be a js var compatible string
    function sendAnalyticsData(eventName, eventCategory, eventSubCategory, eventType, eventSubType) {
        var isEventDataAlreadySent = PreferencesManager.getViewState(eventName),
            isHDTracking   = PreferencesManager.getExtensionPrefs("healthData").get("healthDataTracking"),
            eventParams = {};
        if (isHDTracking && !isEventDataAlreadySent && eventName && eventCategory) {
            eventParams =  {
                eventName: eventName,
                eventCategory: eventCategory,
                eventSubCategory: eventSubCategory || "",
                eventType: eventType || "",
                eventSubType: eventSubType || ""
            };
            notifyHealthManagerToSendData(eventParams);
        }
    }

    // Define public API
    exports.getHealthDataLog          = getHealthDataLog;
    exports.setHealthDataLog          = setHealthDataLog;
    exports.getAggregatedHealthData   = getAggregatedHealthData;
    exports.clearHealthData           = clearHealthData;
    exports.fileOpened                = fileOpened;
    exports.setProjectDetail          = setProjectDetail;
    exports.searchDone                = searchDone;
    exports.setHealthLogsEnabled      = setHealthLogsEnabled;
    exports.shouldLogHealthData       = shouldLogHealthData;
    exports.init                      = init;

    // constants
    // searchType for searchDone()
    exports.SEARCH_INSTANT            = "searchInstant";
    exports.SEARCH_ON_RETURN_KEY      = "searchOnReturnKey";
    exports.SEARCH_REPLACE_ALL        = "searchReplaceAll";
    exports.SEARCH_NEXT_PAGE          = "searchNextPage";
    exports.SEARCH_PREV_PAGE          = "searchPrevPage";
    exports.SEARCH_LAST_PAGE          = "searchLastPage";
    exports.SEARCH_FIRST_PAGE         = "searchFirstPage";
    exports.SEARCH_REGEXP             = "searchRegExp";
    exports.SEARCH_CASE_SENSITIVE     = "searchCaseSensitive";
    // A new search context on search bar up-Gives an idea of number of times user did a discrete search
    exports.SEARCH_NEW                = "searchNew";
    exports.sendAnalyticsData         = sendAnalyticsData;
});

setHealthData

Sets the health data

dataObject Object
The object to be stored as health data
    function setHealthData(dataObject) {
        if (!shouldLogHealthData()) {
            return;
        }
        PreferencesManager.setViewState(HEALTH_DATA_STATE_KEY, dataObject);
    }
Public API

setHealthDataLog

Sets the health data for the given key

dataObject Object
The object to be stored as health data for the key
    function setHealthDataLog(key, dataObject) {
        var healthData = getStoredHealthData();
        healthData[key] = dataObject;
        setHealthData(healthData);
    }
Public API

setHealthLogsEnabled

Enable or disable health data logs

enabled boolean
true to enable health logs
    function setHealthLogsEnabled(enabled) {
        logHealthData = enabled;
        if (!enabled) {
            clearHealthData();
        }
    }
Public API

setProjectDetail

Sets the project details(a probably unique prjID, number of files in the project and the node cache size) in the health log The name of the project is never saved into the health data log, only the hash(name) is for privacy requirements.

projectName string
The name of the project
numFiles number
The number of file in the project
cacheSize number
The node file cache memory consumed by the project
    function setProjectDetail(projectName, numFiles, cacheSize) {
        var projectNameHash = StringUtils.hashCode(projectName),
            FIFLog = getHealthDataLog("ProjectDetails");
        if (!FIFLog) {
            FIFLog = {};
        }
        FIFLog["prj" + projectNameHash] = {
            numFiles : numFiles,
            cacheSize : cacheSize
        };
        setHealthDataLog("ProjectDetails", FIFLog);
    }
Public API

shouldLogHealthData

All the logging functions should be disabled if this returns false

Returns: boolean
true if health data can be logged
    function shouldLogHealthData() {
        return logHealthData;
    }