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} – {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