class LogAccess{
constructor(props) {
this.dataTable = null; // Lưu reference đến DataTable instance
}
//tải danh sách các ISP để hiển thị trong dropdown filter
loadIspForFilter(){
let token = $("meta[name='csrf-token']").attr("content");
$.ajax({
url: '/logaccess/unique-isp-list',
type: 'GET',
data: {_token: token},
success: function (response) {
let select = $('#ispFilter');
select.empty();
select.append('');
response.isps.forEach(function(isp) {
// Thêm count vào option text với format số có dấu phẩy
let countFormatted = isp.count.toLocaleString();
select.append('');
});
},
error: function (xhr) {
console.log(xhr.responseText);
}
});
}
//tải danh sách các ISP để hiển thị trong dropdown filter
loadIspForFilter(){
let token = $("meta[name='csrf-token']").attr("content");
$.ajax({
url: '/logaccess/unique-isp-list',
type: 'GET',
data: {_token: token},
success: function (response) {
let select = $('#ispFilter');
select.empty();
select.append('');
response.isps.forEach(function(isp) {
// Thêm count vào option text với format số có dấu phẩy
let countFormatted = isp.count.toLocaleString();
select.append('');
});
},
error: function (xhr) {
console.log(xhr.responseText);
}
});
}
//tải danh sách các nước để hiển thị trong dropdown filter
loadCountriesForFilter(){
let token = $("meta[name='csrf-token']").attr("content");
$.ajax({
url: '/logaccess/unique-countries-list',
type: 'GET',
data: {_token: token},
success: function (response) {
let select = $('#countryFilter');
select.empty();
select.append('');
response.countries.forEach(function(country) {
// Thêm count vào option text với format số có dấu phẩy
let countFormatted = country.count.toLocaleString();
select.append('');
});
},
error: function (xhr) {
console.log(xhr.responseText);
}
});
}
//đếm số lượng quốc gia truy cập
totalCountriesCount(){
let token = $("meta[name='csrf-token']").attr("content");
$.ajax({
url: '/logaccess/unique-countries',
type: 'GET',
data: {_token: token},
success: function (response) {
$('#totalCountriesCount').text(response.unique_countries_count);
},
error: function (xhr) {
console.log(xhr.responseText);
}
});
}
//thống kê truy cập theo từng quốc gia
totalCountries(){
let token = $("meta[name='csrf-token']").attr("content");
new DataTable('#totalCountries', {
debug:true,
processing: true,
serverSide: true,
ajax: {
data:{_token:token},
url: '/logaccess/country-statistics',
type: 'GET',
"dataSrc": function(json) {
return json.data; // đảm bảo dữ liệu của bạn nằm trong mảng `data`
}
},
columns: [
{data: 'country'},
{data: 'count'},
],
columnDefs: [
{
targets: 0,
className: 'tdCenter',
},
{
targets: 1,
className: 'tdCenter',
},
]
});
}
totalIpStatistics(){
let token = $("meta[name='csrf-token']").attr("content");
let self = this;
this.dataTable = new DataTable('#totalIpStatistics', {
debug:true,
processing: true,
serverSide: true,
ajax: {
data: function(d) {
d._token = token;
d.country_filter = $('#countryFilter').val(); // Thêm filter cho quốc gia
d.isp_filter = $('#ispFilter').val(); // Thêm filter cho ISP
d.min_access_filter = $('#minAccessFilter').val(); // Thêm filter cho số lần truy cập tối thiểu
d.from_date_filter = $('#fromDateFilter').val(); // Thêm filter cho ngày bắt đầu
d.to_date_filter = $('#toDateFilter').val(); // Thêm filter cho ngày kết thúc
return d;
},
url: '/logaccess/ip-statistics',
type: 'GET',
"dataSrc": function(json) {
return json.data;
}
},
columns: [
{data: 'ip', title: 'IP Address'},
{data: 'count', title: 'Requests'},
{data: 'domain', title: 'Domain'},
{data: 'location', title: 'Location'},
{data: 'country', title: 'Country'},
{data: 'asn_organization', title: 'ISP/Organization'},
{data: 'first_access', title: 'First Access'},
{data: 'last_access', title: 'Last Access'},
],
columnDefs: [
{
targets: [0, 1, 2, 3, 4],
className: 'tdCenter',
},
],
order: [[1, 'desc']] // Sort by count descending
});
}
//đếm số lượng truy cập theo ip
ipStatistics(){
let token = $("meta[name='csrf-token']").attr("content");
new DataTable('#ipStatistics', {
debug:true,
processing: true,
serverSide: true,
ajax: {
data:{_token:token},
url: '/logaccess/ip-statistics',
type: 'GET',
"dataSrc": function(json) {
return json.data; // đảm bảo dữ liệu của bạn nằm trong mảng `data`
}
},
columns: [
{data: 'ip'},
{data: 'count'},
],
columnDefs: [
{
targets: 0,
className: 'tdCenter',
},
{
targets: 1,
className: 'tdCenter',
},
]
});
}
// Xuất dữ liệu thành CSV
exportData() {
let token = $("meta[name='csrf-token']").attr("content");
// Lấy các giá trị filter hiện tại
let filters = {
_token: token,
country_filter: $('#countryFilter').val(),
isp_filter: $('#ispFilter').val(),
min_access_filter: $('#minAccessFilter').val(),
from_date_filter: $('#fromDateFilter').val(),
to_date_filter: $('#toDateFilter').val(),
export: true
};
// Tạo URL với các tham số filter
let queryString = $.param(filters);
let exportUrl = '/logaccess/export-ip-statistics?' + queryString;
// Tải file
window.open(exportUrl, '_blank');
}
// Xóa tất cả bộ lọc
clearAllFilters() {
$('#countryFilter').val('');
$('#ispFilter').val('');
$('#minAccessFilter').val('');
$('#fromDateFilter').val('');
$('#toDateFilter').val('');
// Reload datatable
if (this.dataTable) {
this.dataTable.ajax.reload();
}
}
}
$(function () {
let logAccess = new LogAccess();
logAccess.totalCountriesCount();
logAccess.totalCountries();
logAccess.totalIpStatistics();
logAccess.loadCountriesForFilter();
logAccess.loadIspForFilter();
// Event listener cho dropdown filter quốc gia
$('#countryFilter').on('change', function() {
if (logAccess.dataTable) {
logAccess.dataTable.ajax.reload(); // Reload data với filter mới
}
});
// Event listener cho dropdown filter ISP
$('#ispFilter').on('change', function() {
if (logAccess.dataTable) {
logAccess.dataTable.ajax.reload();
}
});
// Event listener cho input số lần truy cập tối thiểu
$('#minAccessFilter').on('keyup', function() {
if (logAccess.dataTable) {
logAccess.dataTable.ajax.reload();
}
});
// Event listener cho date filter từ ngày
$('#fromDateFilter').on('change', function() {
if (logAccess.dataTable) {
logAccess.dataTable.ajax.reload();
}
});
// Event listener cho date filter đến ngày
$('#toDateFilter').on('change', function() {
if (logAccess.dataTable) {
logAccess.dataTable.ajax.reload();
}
});
// Event listener cho button áp dụng bộ lọc
$('#applyFiltersBtn').on('click', function() {
if (logAccess.dataTable) {
logAccess.dataTable.ajax.reload();
}
});
// Event listener cho button xóa bộ lọc
$('#clearFiltersBtn').on('click', function() {
logAccess.clearAllFilters();
});
// Event listener cho button xuất dữ liệu
$('#exportDataBtn').on('click', function() {
logAccess.exportData();
});
});