Modules (181)

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) {
        if (!shouldLogHealthData()) {
            return;
        }
        var fileExtension = FileUtils.getFileExtension(filePath),
            language = LanguageManager.getLanguageForPath(filePath),
            healthData = getStoredHealthData(),
            fileExtCountMap = [];
        healthData.fileStats = healthData.fileStats || {
            openedFileExt     : {},
            workingSetFileExt : {}
        };
        if (language.getId() !== "unknown") {
            fileExtCountMap = addedToWorkingSet ? healthData.fileStats.workingSetFileExt : healthData.fileStats.openedFileExt;
            if (!fileExtCountMap[fileExtension]) {
                fileExtCountMap[fileExtension] = 0;
            }
            fileExtCountMap[fileExtension]++;
            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", {});
    }
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);
    }

    // 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";
});

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;
    }