Viewing File: /usr/local/cpanel/base/sharedjs/emailstats_summary.js

if (typeof CPANEL == "undefined" || !CPANEL) {

    /**
     * The CPANEL global namespace object.  If CPANEL is already defined, the
     * existing CPANEL object will not be overwritten so that defined
     * namespaces are preserved.
     * @class CPANEL
     * @static
     */
    alert("The cjt has not been loaded, and must be loaded before this script: emailstats_summary.js");
}

( function() {
    window.DEFAULT_ROWS_PER_PAGE = 100;

    CPANEL.EximStatsSummary = function(oConfigs) {

        for (var setting in oConfigs) {
            if (typeof this[setting] != "undefined") {
                this[setting] = oConfigs[setting];
            }
        }

        init_start_end_times( this.starttime );
    };

    CPANEL.EximStatsSummary.mytimezone = YAHOO.util.Date.format(new Date(), { format: "%z" }),

    CPANEL.EximStatsSummary.oneday = (86400 * 1000);

    CPANEL.EximStatsSummary.thirtyonedays = (86400 * 1000 * 30);


    CPANEL.EximStatsSummary.prototype = {
        unixstarttime: null,

        initialsort: "SUCCESSCOUNT",

        group: "user",

        deliverytype: null,

        unixendtime: null,

        timebuffer: (60 * 60 * 4 * 1000),

        columns: ["USER", "DOMAIN", "SENDCOUNT", "TOTALSIZE"],

        userstatsuri: "/json-api/emailtrack_user_stats?",

        useruri: "emailstats_search",

        starttime: "yesterday",

        statsfail: function(o) {
            for (var i = 0; i < o.argument.statlist.length; i++) {
                var statname = o.argument.statlist[i];
                document.getElementById("deliverystats_" + statname).innerHTML = "Failed to fetch data";
            }
        },

        loadUnixTimes: function() {
            var currentint = get_start_end_times();
            this.unixstarttime = currentint[0] && (currentint[0].getTime() / 1000);
            this.unixendtime = currentint[1] && (currentint[1].getTime() / 1000);
        },

        buildDeliveryReport: function() {
            var EximStatsSumObj = this;

            this.loadUnixTimes();

            var unixtimeToDate = function(sData) {
                return new Date(parseInt(sData) * 1000);
            };

            var _img_lookup = {
                0: CPANEL.icons.success24,
                1: CPANEL.icons.error24
            };
            var lookupImg = function(oData) {
                return _img_lookup[oData] || _img_lookup[1];
            };

            var typetoImg = function(elCell, oRecord, tbl, oData) {
                elCell.innerHTML = lookupImg(oData) + (oData ? " " + oData : "");
            };

            var format_bytes = function(cell, rec, col, d) {
                cell.innerHTML = LOCALE.format_bytes(d);
            };
            var format_num = function(cell, rec, col, d) {
                cell.innerHTML = LOCALE.numf(d);
            };

            var possibleColumns = {
                "REACHED_MAXEMAILS": { "column": { key: "REACHED_MAXEMAILS", label: LOCALE.maketext("Relay per Hour"), sortable: true, formatter: typetoImg }, "schema": { key: "REACHED_MAXEMAILS", parser: "number" } },
                "REACHED_MAXDEFERFAIL": { "column": { key: "REACHED_MAXDEFERFAIL", label: LOCALE.maketext("Defer+Fail Per Hour"), sortable: true, formatter: typetoImg }, "schema": { key: "REACHED_MAXDEFERFAIL", parser: "number" } },
                "USER": { "column": { key: "USER", label: LOCALE.maketext("User"), sortable: true, formatter: "text" }, "schema": { key: "USER" } },
                "DOMAIN": { "column": { key: "DOMAIN", label: LOCALE.maketext("Domain"), sortable: true, formatter: "text" }, "schema": { key: "DOMAIN" } },
                "SUCCESSCOUNT": { "column": { key: "SUCCESSCOUNT", label: LOCALE.maketext("Successful"), formatter: format_num, sortable: true }, "schema": { key: "SUCCESSCOUNT", parser: "number" } },
                "FAILCOUNT": { "column": { key: "FAILCOUNT", label: LOCALE.maketext("Failures"), formatter: format_num, sortable: true }, "schema": { key: "FAILCOUNT", parser: "number" } },
                "DEFERCOUNT": { "column": { key: "DEFERCOUNT", label: LOCALE.maketext("Deferrals"), formatter: format_num, sortable: true }, "schema": { key: "DEFERCOUNT", parser: "number" } },
                "TOTALSIZE": { "column": { key: "TOTALSIZE", label: LOCALE.maketext("Data Sent"), formatter: format_bytes, sortable: true }, "schema": { key: "TOTALSIZE", parser: "number" } },
                "SENDCOUNT": { "column": { key: "SENDCOUNT", label: LOCALE.maketext("Total Messages"), formatter: format_num, sortable: true }, "schema": { key: "SENDCOUNT", parser: "number" } },
                "DEFERFAILCOUNT": { "column": { key: "DEFERFAILCOUNT", label: LOCALE.maketext("Failed and Deferred"), formatter: format_num, sortable: true }, "schema": { key: "DEFERFAILCOUNT", parser: "number" } }
            };

            // Column definitions
            var myColumnDefs = [];
            var fields = [];

            for (var i = 0; i < this.columns.length; i++) {
                myColumnDefs.push( possibleColumns[this.columns[i]].column );
                fields.push( possibleColumns[this.columns[i]].schema );
            }

            // DataSource instance
            var myDataSource = new CPANEL.datasource.CPANEL_XHRDataSource( {
                func: "emailtrack_user_stats",
                request_data: {
                    user: this.user || null,
                    group: EximStatsSumObj.group
                }
            } );

            // Summary configuration
            var myConfigs = {
                initialLoad: false,
                generateRequest: function(state, dt) {
                    var api = CPANEL.datatable.get_api_data(state);

                    api.filter = [];
                    if ( /remote/.test(EximStatsSumObj.deliverytype) ) {
                        api.filter.push( ["SUCCESSCOUNT", "gt", 0] );
                    }

                    var quick = DOM.get("quicksearch").value.trim();
                    if (quick) {
                        api.filter.push( ["*", "contains", quick] );
                    }

                    // Don't display all-zero rows for the relayers query.
                    return { api_data: api, data: {
                        deliverytype: EximStatsSumObj.deliverytype || null,
                        starttime: EximStatsSumObj.unixstarttime || null,
                        endtime: EximStatsSumObj.unixendtime || null
                    } };
                },
                dynamicData: true, // Enables dynamic server-driven data
                sortedBy: CPANEL.nvdata.initial && CPANEL.nvdata.initial.table_sort || { key: this.initialsort, dir: YAHOO.widget.DataTable.CLASS_DESC }, // Sets UI initial sort arrow
                paginator: THE_PAGINATOR
            };

            // Summary instance
            var mySummary = new YAHOO.widget.DataTable("eximstatssummary", myColumnDefs, myDataSource, myConfigs);

            // Update totalRecords on the fly with value from server
            mySummary.handleDataReturnPayload = function(oRequest, oResponse, oPayload) {
                oPayload.totalRecords = parseInt(oResponse.meta.total_records);
                return oPayload;
            };

            mySummary.getTableEl().title = LOCALE.maketext("Click a row to show a detailed report.");

            var handleRowClick = function(e) {
                var targetRow = e.target;
                var oRecord = this.getRecord(targetRow);
                var oData = oRecord.getData();

                EximStatsSumObj.loadUnixTimes();

                // Send "" for empty start/end times since otherwise the page
                // defaults to something based on the current time.
                var query_str = CPANEL.util.make_query_string( {
                    user: oData.USER,
                    unixstarttime: EximStatsSumObj.unixstarttime || "",
                    unixendtime: EximStatsSumObj.unixendtime || "",
                    deliverytype: EximStatsSumObj.deliverytype || null,
                    showAll: window.RELAY_ALL_BY_DEFAULT ? "true" : null
                } );
                window.location.href = EximStatsSumObj.useruri + "?" + query_str;
            };

            mySummary.subscribe("rowClickEvent", handleRowClick);

            return {
                ds: myDataSource,
                dt: mySummary
            };
        },

        updatedata: function() {
            if ( !this.deliveryreport ) {
                this.deliveryreport = this.buildDeliveryReport();
            }

            // Sends a request to the DataSource for more data
            var oCallback = {
                success: this.deliveryreport.dt.onDataReturnReplaceRows,
                failure: window.handle_ajax_error,
                scope: this.deliveryreport.dt,
                argument: this.deliveryreport.dt.getState()
            };

            this.loadUnixTimes();

            var dt = this.deliveryreport.dt;
            var req = dt.get("generateRequest")( dt.getState(), dt );
            this.deliveryreport.ds.sendRequest(req, oCallback);
        }
    };

})();
Back to Directory File Manager