APLIKASI MENGELOLA DATA ACCESS LOG MENGGUNAKAN C# Melihat LOG berdasar Hari, Jam, dan URL Terbanyak diakses
Disusun oleh Bayu Pratama RN [M0507011]
S1 TEKNIK INFORMATIKA UNS FAKULTAS MIPA
Batasan Aplikasi 1. Aplikasi yang dibuat hanya dapat membaca database. Aplikasi tidak bisa mengimport log ke database. Sehingga jika diperlukan, anda harus mengimport dahulu menggunakan aplikasi yang telah dibuat sebelumnya, kemudian baru menjalankan aplikasi ini. 2. Aplikasi ini hanya untuk melihat data log, melihat alamat yang terbanyak diakses, melihat berdasarkan hari, dan melihat berdasarkan jam. 3. Aplikasi dibuat menggunakan C# dan dibuat menggunakan Visual Studio 2005, sehingga untuk menjalankan harus terinstall .NET Framework 2.0 di komputer anda. Desain Tabel Database yang digunakan adalah Microsoft Access dan sama persis dengan yang dibuat pada aplikasi untuk import database. Berikut ini adalah ERD dari database.
Tabel LogFile untuk menyimpan session dari import (karena dimungkinkan melakukan import lebih dari 1 file LOG, misal dari 5 server yang berbeda), sehingga kita bias memisahkan log berdasarkan server asal LOG file tersebut. Tabel LogContent digunakan untuk menyimpan isi dari LOG File. Listing Program dan ScreenShoot File: Program.cs Merupakan source code untuk eksekusi program pertama kali. Bagian ini akan memanggil MainForm. using System; using System.Collections.Generic; using System.Windows.Forms; namespace LogViewer { static class Program { [STAThread] static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault( false ); Application.Run( new MainForm() ); } } }
}
File: MainForm.cs Merupakan source code untuk membuat Form MainForm yang merupakan tampilan utama dengan pilihan-pilihan fungsi using using using using using using using
System; System.Collections.Generic; System.ComponentModel; System.Data; System.Drawing; System.Text; System.Windows.Forms;
namespace LogViewer { public partial class MainForm : Form { public MainForm() { InitializeComponent(); } private void MainForm_Load( object sender, EventArgs e ) { this.logFileTableAdapter.Fill( this. .
Gambar tampilan MainForm dengan 4 tombol fungsi. Jika anda telah mengimport lebih dari 1 file access.log, maka anda dapat memilih file dari server mana yang akan anda gunakan. File: LogDataForm.cs Merupakan source code untuk membuat Form LogDataForm, yang digunakan untuk menampilkan log keseluruhan (tanpa filter hari ataupun jam). using using using using using using using
System; System.Collections.Generic; System.ComponentModel; System.Data; System.Drawing; System.Text; System.Windows.Forms;
namespace LogViewer { public partial class LogDataForm : Form { public LogDataForm() { InitializeComponent(); } private void LogDataForm_Load( object sender, EventArgs e ) { logContentTableAdapter.Fill( logDB.LogContent ); dataGridContent.DataSource = logDB.LogContent.DefaultView; logDB.LogContent.DefaultView.RowFilter = "LogID = '" + this.LogID + "'"; } private int __logid = 0; public int LogID { get { return __logid ; set { __logid = value; }
} }
} }
Di bawah ini merupakan screenshot dari Form LogDataForm yang menampilkan seluruh data tanpa batasan hari dan jam. Form ini dapat ditampilkan jika anda mengklik tombol : “Lihat Data Log” dari MainForm.
File: URLTerbanyak.cs Merupakan source code untuk menampilkan 3 URL terbanyak diakses. Prinsip kerjanya adalah pada DataTable logcontent = logContentTableAdapter.JumlahURLGetByLogID(this.LogID);
Method JumlahURLGetByLogID(this.LogID) di dalamnya terdapat query SQL SELECT URL, COUNT(URL) AS Jumlah FROM LogContent WHERE (Method = 'GET') GROUP BY URL ORDER BY COUNT(URL) DESC
(LogID = ?) AND
yang kemudian hasilnya adalah daftar URL dan banyaknya akses yang diurutkan dari paling banyak diakses hingga paling sedikit diakses, tabel hasil ini disimpan dalam variabel logcontent. Untuk menampilkan tinggal diambil saja logcontent.Rows[index]["URL"].ToString() dengan index 0-2 using using using using using using using
System; System.Collections.Generic; System.ComponentModel; System.Data; System.Drawing; System.Text; System.Windows.Forms;
namespace LogViewer { public partial class URLTerbanyak : Form { public URLTerbanyak() { InitializeComponent(); } private void URLTerbanyak_Load( object sender, EventArgs e ) { try { string ServerName = logFileTableAdapter.GetServerNameByID( this.LogID ); DataTable logcontent = logContentTableAdapter.JumlahURLGetByLogID(this.LogID); // tampilkan peringkat 1 terbanyak if (logcontent.Rows[0]["URL"].ToString().ToLower().Substring(0,4) != "http" ) { labelURL1.Text = ServerName + logcontent.Rows[0]["URL"].ToString();
} else { labelURL1.Text = logcontent.Rows[0]["URL"].ToString(); } labelJumlah1.Text = "Jumlah : " + logcontent.Rows[0]["Jumlah"].ToString(); // tampilkan peringkat 2 terbanyak if ( logcontent.Rows[1]["URL"].ToString().ToLower().Substring(0,4) != "http" ) { labelURL2.Text = ServerName + logcontent.Rows[1]["URL"].ToString(); } else { labelURL2.Text = logcontent.Rows[1]["URL"].ToString(); } labelJumlah2.Text = "Jumlah : " + logcontent.Rows[1]["Jumlah"].ToString(); // tampilkan peringkat 3 terbanyak if ( logcontent.Rows[2]["URL"].ToString().ToLower().Substring(0,4) != "http" ) { labelURL3.Text = ServerName + logcontent.Rows[2]["URL"].ToString(); } else { labelURL3.Text = logcontent.Rows[2]["URL"].ToString(); } labelJumlah3.Text = "Jumlah : " + logcontent.Rows[2]["Jumlah"].ToString(); } catch { } } private int __logID = 0; public int LogID { get { return __logID ; } set { __logID = value; } } } }
Berikut diatas adalah tampilan dari 3 URL yang paling banyak diakses. Form akan menampilkan URL dan banyaknya akses pada URL tersebut. Form tampilan ini dapat dimunculkan dengan meng-click tombol “Perlihatkan URL Terbanyak Diakses” dari MainForm. File: LogBerdasarHari.cs Merupakan source code untuk menampilkan log berdasarkan hari yang diinginkan. Karena database Access tidak menyediakan fungsi mengetahui hari berdasarkan tanggal, maka kita membuat sendiri fungsi tersebut. Prinsip kerjanya, kita membaca kolom AccessTime yang ada pada tabel LogContent dari database, selanjutnya tinggal mengecek hari dari tanggal itu. Jika tidak sama dengan hari yang dipilih maka baris log tersebut tidak ditampilkan.
using using using using using using using
System; System.Collections.Generic; System.ComponentModel; System.Data; System.Drawing; System.Text; System.Windows.Forms;
namespace LogViewer { public partial class LogBerdasarHari : Form { public LogBerdasarHari() { InitializeComponent(); } private int __logid = 0; private void LogDataForm_Load( object sender, EventArgs e ) { logContentTableAdapter.Fill( logDB.LogContent ); logDB.LogContent.DefaultView.RowFilter = "LogID = '" + this.LogID + "'"; dataGridContent.DataSource = logDB.LogContent.DefaultView; } private void perlihatkanLogBerdasarHari( DayOfWeek namahari ) { logContentTableAdapter.Fill( logDB.LogContent ); logDB.LogContent.DefaultView.RowFilter = "LogID = '" + this.LogID + "'"; DataView tabel = logDB.LogContent.DefaultView; int i = 0; while (i < tabel.Count) { DateTime dt = (DateTime) tabel[i]["AccessTime"]; if (dt.DayOfWeek != namahari) { tabel.Delete( i ); } else { i++; } } MessageBox.Show( "Ada : " + tabel.Count + " Data." ); } private void buttonSenin_Click( object sender, EventArgs e ) { this.Text = "LOG pada hari Senin"; perlihatkanLogBerdasarHari( DayOfWeek.Monday ); } private void buttonSelasa_Click( object sender, EventArgs e ) { this.Text = "LOG pada hari Selasa"; perlihatkanLogBerdasarHari( DayOfWeek.Tuesday ); } private void buttonRabu_Click( object sender, EventArgs e ) { this.Text = "LOG pada hari Rabu"; perlihatkanLogBerdasarHari( DayOfWeek.Wednesday ); } private void buttonKamis_Click( object sender, EventArgs e ) { this.Text = "LOG pada hari Kamis"; perlihatkanLogBerdasarHari( DayOfWeek.Thursday ); }
private void buttonJumat_Click( object sender, EventArgs e ) { this.Text = "LOG pada hari Jumat"; perlihatkanLogBerdasarHari( DayOfWeek.Friday ); } private void buttonSabtu_Click( object sender, EventArgs e ) { this.Text = "LOG pada hari Sabtu"; perlihatkanLogBerdasarHari( DayOfWeek.Saturday ); } private void buttonMinggu_Click( object sender, EventArgs e ) { this.Text = "LOG pada hari Minggu"; perlihatkanLogBerdasarHari( DayOfWeek.Sunday ); } public int LogID { get { return __logid; } set { __logid = value; } } } }
Gambar diatas merupakan Form untuk menampilkan LOG berdasarkan hari. Form diatas bisa diakses dari tombol “LOG Berdasarkan Hari” dari MainForm. Pada form diatas, sedang dipilih hari SENIN. Dapat di cek bahwa tanggal 05-04-2010, 12-04-2010, 19-04-2010 merupakan hari Senin. Untuk mengganti hari, anda bisa mengklik tombol pada sis samping. Sementara gambar di bawah ini merupakan form yang menampilkan LOG pada hari JUMAT. Dapat di cek bahwa pada tanggal 16-04-2010 (seperti yang ditampilkan pada gambar screenshot) merupakan hari JUMAT.
File: LogBerdasarJam.cs Dibawah ini merupakan source code untuk menampilkan data LOG berdasarkan JAM. Prinsip kerjanya adalah kita membaca kolom AccessTime yang ada pada tabel LogContent dari database, selanjutnya tinggal mengecek apakah jam pada baris log tersebut berada pada range yang kita harapkan using using using using using using using
System; System.Collections.Generic; System.ComponentModel; System.Data; System.Drawing; System.Text; System.Windows.Forms;
namespace LogViewer { public partial class LogBerdasarJam : Form { public LogBerdasarJam() { InitializeComponent(); } private int __logid = 0; private void LogDataForm_Load( object sender, EventArgs e ) { logContentTableAdapter.Fill( logDB.LogContent ); logDB.LogContent.DefaultView.RowFilter = "LogID = '" + this.LogID + "'"; dataGridContent.DataSource = logDB.LogContent.DefaultView; for (int i = 0; i < 24; i++) { string str = string.Format("Jam {0:00}:00 - {0:00}:59",i); comboBoxJam.Items.Add( str ); } } private void perlihatkanLogBerdasarJam( int jam ) {
logContentTableAdapter.Fill( logDB.LogContent ); logDB.LogContent.DefaultView.RowFilter = "LogID = '" + this.LogID + "'"; DataView tabel = logDB.LogContent.DefaultView; int i = 0; while (i < tabel.Count) { DateTime dt = (DateTime) tabel[i]["AccessTime"]; if (dt.Hour != jam) { tabel.Delete( i ); } else { i++; } } this.Text = "Log pada " + comboBoxJam.Text; labelInfo.Text = "Ada : " + tabel.Count + " Data."; } public int LogID { get { return __logid; } set { __logid = value; } } private void comboBoxJam_SelectedIndexChanged( object sender, EventArgs e ) { perlihatkanLogBerdasarJam( comboBoxJam.SelectedIndex ); } } }
Pada gambar di bawah ini menampilkan LOG yang waktu akses nya antara jam 08:00 hingga 08:59. Bisa dilihat bahwa baris-baris yang ada telah menampilkan jam antara pukul 08:00 hingga 08:59. Untuk mengganti range jam bisa dipilih jam pada sisi sebelah samping.
Gambar pada screenshot form di bawah menampilkan baris baris LOG yang memiliki waktu akses antara 19:00 hingga 19:59.