Viewing File: /usr/local/cpanel/base/frontend/jupiter/stats/lastvisit.html.tt

[% SET CPANEL.CPVAR.dprefix = "../" %]

[% WRAPPER '_assets/master.html.tt'
    app_key = 'visitors'
-%]



[%
USE Api2;
USE CPList;
USE HTTP;
USE JSON;
USE NVData;

PROCESS '_assets/_ajaxapp_header.html.tt';

SET nvdata = NVData.get_page_nvdata();
IF (!nvdata);
    nvdata = Api2.exec( 'NVData', 'get', { names => 'latest_visitors' } ).0.value;
    IF nvdata;
        SET nvdata = JSON.parse(nvdata);
    END;
END;

SET last_apache_hits = Api2.exec( 'Stats', 'lastapachehits', {
    domain              => CPANEL.FORM.domain,
    ssl                 => CPANEL.FORM.ssl,
    api2_sort           => 1,
    api2_sort_column_1  => 'line',
    api2_sort_method_1  => 'numeric',
    api2_sort_reverse_1 => 1,
} );

SET total_bytes = 0;

#a kludge, useful until locale.datetime() supports timezones
FOR hit = last_apache_hits;
    SET match = hit.tz.match('([-+]?)([0-9]{2})([0-9]{2})');
    hit.tz_adjusted_timestamp = hit.timestamp + ( match.0 == '-' ? -1 : 1 ) * ( match.1 * 3600 + match.2 * 60 );
END;
SET adjusted_timestamp2locale = locale.get_lookup_hash_of_multi_epoch_datetime( last_apache_hits.ofeach('tz_adjusted_timestamp'), 'datetime_format_short' );

FOR hit = last_apache_hits;
    hit.localtime = adjusted_timestamp2locale.${hit.tz_adjusted_timestamp};
    hit.delete('tz_adjusted_timestamp');
    total_bytes = total_bytes + hit.size;  #this needs to stay in after the "kludge" stuff is removed
END;

SET TABLE_ID = 'latest_visitors_hits';
-%]

<style type="text/css">
p {
    font-size:13px;
    color:#666;
    line-height:19px;
}

a {
    text-decoration:none;
}

.yui-skin-sam .yui-dt td.long_string {
    text-align: left;
}

.yui-skin-sam .yui-dt td.numeric_data {
    text-align: right;
}

#content .body-content,
.body-content {
    padding:0px;
}

.std_table_container,
.cjt_table_section,
.yui-dt-liner {
    width: 100% !important;
}

.yui-dt {
    overflow-x: auto;
}

#latest_visitors_hits_container > table {
    width: 100% !important;
}
</style>


<div class="body-content">

<div id="latestVisitorsContainer">
    <div id="descLatestVisitors" class="page-heading">[% locale.maketext('Latest visitors to “[_1]”.',CPANEL.FORM.domain) %]</div>
    <br />
    <div id="big_info_container" class="data-info"></div>
    <div id="latestVisitorsClear" class="clear"></div>
    <div class="std_table_container">
        [% PROCESS '_assets/_standard_table.html.tt' id=TABLE_ID -%]
    </div>
</div>

</div>

[% INCLUDE _assets/return_link.html.tt return_location='lastvisitors_landing.html' return_link_text=locale.maketext('Go Back') %]


[% PROCESS '_assets/_ajaxapp_footer.html.tt' %]

<script type="text/plain" id="status_code_hover_template">
<abbr title="{string_html}">{code}</abbr>
</script>
<script type="text/plain" id="big_info_template">
<table cellspacing="0" id="big_info_table" style="margin-bottom:20px">
<tr><th style="text-align:left">[% locale.maketext('Reporting Period:') %]</th><td>{first_time} &nbsp;&ndash;&nbsp; {last_time}</td></tr>
<tr><th style="text-align:left">[% locale.maketext('Total Data Sent:') %]</th><td>{total_data_localized}</td></tr>
</table>
</script>
<script type="text/plain" id="url_template">
<a href="{protocol}://{domain_html}{url_html}">{url_html}</a>
</script>
<script type="text/plain" id="url_template_only_url">
<a href="{url_html}">{url_html}</a>
</script>

<script type="text/javascript">
YAHOO.util.Event.throwErrors = true;

var status_codes = [% HTTP.STATUS_CODES.json() %];

var last_apache_hits = [% last_apache_hits.json() || 'null' -%];


//----------------------------------------------------------------------
// COLUMN DEFINITIONS

var _url_template = DOM.get("url_template").text.trim();
var _url_template_only_url = DOM.get("url_template_only_url").text.trim();
var template_to_use;
//FF4b7 dies on this..?!?
//var form_domain_html = ([% CPANEL.FORM.domain.json() %]).html_encode();
var format_url = function(el,rec,col,d) {
    //if the URL has a colon, then do not prefix protocol nor domain to it
    template_to_use = (d.indexOf("://") === -1) ? _url_template : _url_template_only_url;
    el.innerHTML = YAHOO.lang.substitute( template_to_use, {
        protocol    : "[% CPANEL.FORM.ssl ? 'https' : 'http' %]",
        domain_html : [% CPANEL.FORM.domain.json() %].html_encode(),
        url_html    : d.html_encode()
    } );
};

var status_code_images = {
    2: CPANEL.icons.success,
    4: CPANEL.icons.error,
    5: CPANEL.icons.error
};
var _code_html;
var format_status = function(el,rec,col,d) {
    d = String(d);
    _code_html = d.html_encode();
    el.innerHTML = (status_code_images[d.charAt(0)] || "") + " " + _code_html;
    el.title = status_codes[d] || _code_html;
};

var column_defs = [
    {
        key: "ip",
        label: "[% locale.maketext('IP') %]",
        formatter: "text",
        sortable: true,
        resizeable: false,
        sortOptions: { field: "_ipnum" },
        size_to_data: true
    },
    {
        key: "url",
        label: "[% locale.maketext('URL') %]",
        formatter: format_url,
        sortable: true,
        resizeable: false,
        className: "long_string"
    },
    {
        key: "localtime",
        label: "[% locale.maketext('Time') %]",
        formatter: "text",
        sortable: true,
        resizeable: false,
        sortOptions: { defaultOrder: "desc", field: "line" },
        default_width_is_absolute: true
    },
    {
        key: "size",
        label: "[% locale.maketext('Size (bytes)') %]",
        formatter: "text",
        sortable: true,
        resizeable: false,
        sortOptions: { defaultOrder: "desc" },
        className: "numeric_data",
        default_width_is_absolute: true
    },
    {
        key: "status",
        label: "[% locale.maketext('Status') %]",
        formatter: format_status,
        sortable: true,
        resizeable: false,
        hidden: true,
        default_width_is_absolute: true
    },
    {
        key: "method",
        label: "[% locale.maketext('Method') %]",
        formatter: "text",
        sortable: true,
        resizeable: false,
        hidden: true,
        default_width_is_absolute: true
    },
    {
        key: "protocol",
        label: "[% locale.maketext('Protocol') %]",
        formatter: "text",
        sortable: true,
        resizeable: false,
        hidden: true,
        default_width_is_absolute: true
    },
    {
        key: "referer",
        label: "[% locale.maketext('Referring URL') %]",
        formatter: "text",
        sortable:true,
        resizeable: false,
        className: "long_string"
    },
    {
        key: "agent",
        label: "[% locale.maketext('User Agent') %]",
        formatter: "text",
        sortable: true,
        resizeable: false,
        className: "long_string"
    }
];



// INITIAL SORT
//this is how the API call gives the data sorted
var api_sort = {
    key: "localtime",
    dir: YAHOO.widget.DataTable.CLASS_DESC
};


var data_table;
if ( last_apache_hits && last_apache_hits.length ) {
    var hits_count = last_apache_hits.length;
    var ip_num_lookup = {};
    for (var i=0; i<hits_count; i++ ) {
        var d = last_apache_hits[i];
        //use match() here in case a hostname shows up instead of an IP
        var cur_ip = d.ip;
        var ipnum = ( d._ipnum = ip_num_lookup[cur_ip] );
        if ( ipnum === undefined ) {
            var match = cur_ip.match(/\d+/g);
            ipnum = 0;
            if ( match ) {
                while ( match.length ) ipnum = ipnum*256 + parseInt(match.shift());
            }
            d._ipnum = (ip_num_lookup[cur_ip] = ipnum);
        }

        var cur_size = ( d.size = parseInt(d.size) || 0 );
        d.status = parseInt(d.status) || 0;
        d.line = parseInt(d.line) || 0;
    };

    DOM.get("big_info_container").innerHTML = YAHOO.lang.substitute(
        DOM.get("big_info_template").text,
        {
            total_data_localized: [% locale.format_bytes(total_bytes).json() || 'null' %],
            //the dates are sorted in reverse
            first_time: last_apache_hits[ last_apache_hits.length-1 ].localtime,
            last_time:  last_apache_hits[0].localtime
        }
    );

    //stuff to be passed in
    var nvdata = [% nvdata ? JSON.stringify(nvdata) : '{}' -%];
    var data_object = new YAHOO.util.LocalDataSource( last_apache_hits, {
        cloneBeforeCaching: true,
        maxCacheEntries: 25
    } );

    window.data_table = new CPANEL.datatable.Standard_Table(
        "[% TABLE_ID %]",
        column_defs,
        data_object,
        {
            sortedBy:  api_sort,
            nvdata:    nvdata
        }
    );

    data_table.do_text_search();
}
</script>



[% END #wrapper -%]
Back to Directory File Manager