drop package wwwstats; --drop index IND_WWWSTATS_TABLE; --create index IND_WWWSTATS_TABLE on wwwstats_table(day,host,fname); ---------------------------------------------------- create or replace package wwwstats is ---------------------------------------------------- procedure search_page; procedure search_action(isearchBy in varchar2, iday1m in varchar2, iday1d in varchar2, iday1y in varchar2, iday2m in varchar2, iday2d in varchar2, iday2y in varchar2 ); procedure convert_action; procedure show_cmd(isearchBy varchar2, ilimit varchar2, ildate1 varchar2, ildate2 varchar2); end; / show errors; -- / --------------------------------------------------------- create or replace package body wwwstats is --------------------------------------------------------- me varchar2(64); this wwwstats_table%type; this1 wwwstats_table1%type; today date; cgi_url varchar2(32) := '/pulsar-stat/cgi-bin/'; cursor nrow is select * from wwwstats_table order by day; -- --------------------------------------------------------- procedure search_page is --------------------------------------------------------- startDay date; begin htp.htmlOpen; htp.headOpen; htp.title(' Search for Access Statistics '); htp.headClose; htp.formOpen(cgi_url||'wow/wwwstats.search_action', 'POST'); htp.p(''); htp.hr; htp.p('
'); htp.formReset('ReSet'); htp.p(' Search for Access Statistics '); htp.formSubmit(null, 'Search'); htp.p('
'); htp.hr; htp.p(''); htp.p(''); htp.p('[Go to Real Time Update] '); today := sysdate; startDay := add_months(today, -6); htp.br; htp.tableOpen(1,'top','NOWRAP','',''); htp.tableRowOpen('center','center','','NOWRAP',''); htp.tableHeader('Search By', 'center', '', '', 1, 1, ''); htp.tableHeader('Start Date', 'center', '', '', 1, 1, ''); htp.tableHeader('End Date', 'center', '', '', 1, 1, ''); htp.tableRowClose; htp.tableRowOpen('center','center','','NOWRAP',''); htp.p(''); htp.formSelectOpen('isearchBy', '', 1, 'onChange=""'); htp.formSelectOption('Access date', null, 'value = "Access Date"'); htp.formSelectOption('Remote host', null, 'value = "Remote Host"'); htp.formSelectOption('Accessed URL', null, 'value = "Accessed URL"'); htp.formSelectClose; htp.p(''); htp.p(''); pulsar_util.select_date('iday1', startDay, '1996', '2010'); htp.p(''); htp.p(''); pulsar_util.select_date('iday2', today, '1996', '2010'); htp.p(''); htp.tableRowClose; htp.tableClose; htp.formClose; pulsar_util.pageClose; exception when others then cw_error.panic('wwwstats.search_page: ', sqlerrm); end; --------------------------------------------------------- procedure search_action(isearchBy in varchar2, iday1m in varchar2, iday1d in varchar2, iday1y in varchar2, iday2m in varchar2, iday2d in varchar2, iday2y in varchar2 ) is --------------------------------------------------------- ldate1 date := to_date(iday1m||iday1d||iday1y||'000000', 'MONDDYYYYHH24MISS'); ldate2 date := to_date(iday2m||iday2d||iday2y||'235959', 'MONDDYYYYHH24MISS'); ncol number(2) := 2; i number(2); cursor c_host is select host, count(*) from wwwstats_table where (day<=ldate2 and day>=ldate1) group by host order by 2 desc, 1 asc; cursor c_fname is select fname, count(*) from wwwstats_table where (day<=ldate2 and day>=ldate1) group by fname order by 2 desc, 1 asc; cursor c_day is select to_char(day, 'YYYY-MM'), count(*) from wwwstats_table where (day<=ldate2 and day>=ldate1) group by to_char(day, 'YYYY-MM') order by 1 desc, 2 desc; this_host wwwstats_table.host%TYPE; this_fname wwwstats_table.fname%TYPE; this_day varchar2(32); hits number(8); begin pulsar_util.pageOpen('Access statistics grouped by ' || isearchBy); htp.p('
'); htp.p('
Search Range: '||ldate1||' to '||ldate2||'
'); if (ldate1>ldate2) then htp.p('
Sorry, your End Date is not more recent than Start Date
'); htp.hr; end if; htp.tableOpen(cattributes=>'border=5'); htp.tableRowOpen; i := 1; if (isearchBy like 'Remote Host') then for j in 1..ncol loop htp.tableHeader('Remote Host'); htp.tableHeader('Number of Hits'); if j < ncol then htp.tableHeader(' '); end if; end loop; htp.tableRowClose; htp.tableRowOpen; open c_host; loop fetch c_host into this_host, hits; exit when c_host%NOTFOUND; if i = 1 then htp.tableRowOpen; end if; htp.tableData(this_host); htp.tableData(htf.anchor(cgi_url||'wow/wwwstats.show_cmd?isearchBy='||replace(isearchBy, ' ')||chr(ascii('&'))||'ilimit='||this_host ||chr(ascii('&'))||'ildate1='||ldate1||chr(ascii('&'))||'ildate2='||ldate2, hits)); if i < ncol then htp.tableData(''); i := i + 1; else htp.tableRowOpen; i := 1; end if; end loop; end if; if (isearchBy like 'Accessed URL') then ncol := 1; for j in 1..ncol loop htp.tableHeader('Accessed URL'); htp.tableHeader('Number of Hits'); if j < ncol then htp.tableHeader(' '); end if; end loop; htp.tableRowClose; htp.tableRowOpen; open c_fname; loop fetch c_fname into this_fname, hits; exit when c_fname%NOTFOUND; if i = 1 then htp.tableRowOpen; end if; htp.tableData(this_fname); htp.tableData(htf.anchor(cgi_url||'wow/wwwstats.show_cmd?isearchBy=' ||replace(isearchBy, ' ')||chr(ascii('&'))||'ilimit='||this_fname ||chr(ascii('&'))||'ildate1='||ldate1||chr(ascii('&'))||'ildate2='||ldate2, hits)); if i < ncol then htp.tableData(''); i := i + 1; else htp.tableRowOpen; i := 1; end if; end loop; end if; if (isearchBy like 'Access Date') then for j in 1..ncol loop htp.tableHeader('Access Month'); htp.tableHeader('Number of Hits'); if j < ncol then htp.tableHeader(' '); end if; end loop; htp.tableRowClose; htp.tableRowOpen; open c_day; loop fetch c_day into this_day, hits; exit when c_day%NOTFOUND; if i = 1 then htp.tableRowOpen; end if; htp.tableData( to_char( to_date(this_day, 'YYYY-MM'), 'MON-YYYY') ); htp.tableData(htf.anchor(cgi_url||'wow/wwwstats.show_cmd?isearchBy=' ||replace(isearchBy, ' Date', 'Month')||chr(ascii('&'))||'ilimit=' ||to_char( to_date(this_day, 'YYYY-MM'), 'MON-YYYY') ||chr(ascii('&'))||'ildate1='||ldate1||chr(ascii('&'))||'ildate2='||ldate2, hits)); if i < ncol then htp.tableData(''); i := i + 1; else htp.tableRowOpen; i := 1; end if; end loop; end if; htp.tableClose; htp.p('
'); exception when others then cw_error.panic(me|| ':', sqlerrm); end; --------------------------------------------------------- procedure show_cmd(isearchBy varchar2, ilimit varchar2, ildate1 varchar2, ildate2 varchar2) is --------------------------------------------------------- ncol number(2) := 1; i number(2); this_day varchar2(32); hits number(8); cursor c_day is select * from wwwstats_table where (to_date(to_char(day, 'MON-DD-YYYY'), 'MON-DD-YYYY') = to_date(ilimit, 'MON-DD-YYYY')) order by day desc; cursor c_month is select to_char(day, 'YYYY-MM-DD'), count(*) from wwwstats_table where (to_date(to_char(day, 'MON-YYYY'), 'MON-YYYY') = to_date(ilimit, 'MON-YYYY')) group by to_char(day, 'YYYY-MM-DD') order by to_char(day, 'YYYY-MM-DD') desc; cursor c_host is select * from wwwstats_table where (day<=ildate2 and day>=ildate1) and (host = ilimit) order by day desc; cursor c_fname is select * from wwwstats_table where (day<=ildate2 and day>=ildate1) and (fname = ilimit) order by day desc; begin pulsar_util.pageOpen('Accesses with ' || isearchBy ||' of '||ilimit); htp.p('
'); htp.p('
Search Range: '||ildate1||' to '||ildate2||'
'); htp.tableOpen(cattributes=>'border=5'); i := 1; if (isearchBy like 'AccessDate') then htp.tableRowOpen; for j in 1..ncol loop htp.tableHeader('Access Time'); htp.tableHeader('Remote Host'); htp.tableHeader('Accessed URL'); if j < ncol then htp.tableHeader(' '); end if; end loop; htp.tableRowClose; htp.tableRowOpen; open c_day; loop fetch c_day into this; exit when c_day%NOTFOUND; if i = 1 then htp.tableRowOpen; end if; htp.tableData(to_char(this.day, 'MON-DD-YYYY HH24:MI:SS')); htp.tableData(this.host); htp.tableData(this.fname); if i < ncol then htp.tableData(''); i := i + 1; else htp.tableRowOpen; i := 1; end if; end loop; end if; if (isearchBy like 'RemoteHost') then htp.tableRowOpen; for j in 1..ncol loop htp.tableHeader('Access Date'); htp.tableHeader('Remote Host'); htp.tableHeader('Accessed URL'); if j < ncol then htp.tableHeader(' '); end if; end loop; htp.tableRowClose; htp.tableRowOpen; open c_host; loop fetch c_host into this; exit when c_host%NOTFOUND; if i = 1 then htp.tableRowOpen; end if; htp.tableData(to_char(this.day, 'MON-DD-YYYY HH24:MI:SS')); htp.tableData(this.host); htp.tableData(this.fname); if i < ncol then htp.tableData(''); i := i + 1; else htp.tableRowOpen; i := 1; end if; end loop; end if; if (isearchBy like 'AccessedURL') then htp.tableRowOpen; for j in 1..ncol loop htp.tableHeader('Access Date'); htp.tableHeader('Remote Host'); htp.tableHeader('Accessed URL'); if j < ncol then htp.tableHeader(' '); end if; end loop; htp.tableRowClose; htp.tableRowOpen; open c_fname; loop fetch c_fname into this; exit when c_fname%NOTFOUND; if i = 1 then htp.tableRowOpen; end if; htp.tableData(to_char(this.day, 'MON-DD-YYYY HH24:MI:SS')); htp.tableData(this.host); htp.tableData(this.fname); if i < ncol then htp.tableData(''); i := i + 1; else htp.tableRowOpen; i := 1; end if; end loop; end if; if (isearchBy like 'AccessMonth') then ncol := 2; htp.tableRowOpen; for j in 1..ncol loop htp.tableHeader('Access Date'); htp.tableHeader('Number of Hits'); if j < ncol then htp.tableHeader(' '); end if; end loop; htp.tableRowClose; htp.tableRowOpen; open c_month; loop fetch c_month into this_day, hits; exit when c_month%NOTFOUND; if i = 1 then htp.tableRowOpen; end if; htp.tableData(to_char(to_date(this_day, 'YYYY-MM-DD'), 'MON-DD-YYYY') ); htp.tableData(htf.anchor(cgi_url||'wow/wwwstats.show_cmd?isearchBy=AccessDate' ||chr(ascii('&'))||'ilimit='||to_char( to_date(this_day, 'YYYY-MM-DD'), 'MON-DD-YYYY') ||chr(ascii('&'))||'ildate1='||ildate1||chr(ascii('&'))||'ildate2='||ildate2, hits)); if i < ncol then htp.tableData(''); i := i + 1; else htp.tableRowOpen; i := 1; end if; end loop; end if; htp.tableClose; htp.p('
'); end; --------------------------------------------------------- procedure convert_action is --------------------------------------------------------- lday date; cursor c_convert is select DISTINCT * from wwwstats_table1 order by timestamp desc; begin open c_convert; loop fetch c_convert into this1; exit when c_convert%NOTFOUND; this1.timestamp := replace(this1.timestamp, ' -0500', ''); this1.timestamp := replace(this1.timestamp, ' -0400', ''); lday := to_date(this1.timestamp, 'DD/MON/YYYY:HH24:MI:SS'); select wwwstats_seq.nextval into this.id from dual; insert into wwwstats_table values ( this.id, this1.host, this1.rfc931, this1.authuser, lday, this1.method, this1.fname, this1.htv, this1.status, this1.bytes, this1.ident ); end loop; delete from wwwstats_table1; exception when others then cw_error.panic('wwwstats.convert_action: ', sqlerrm); end; --------------------------------------------------------- end; --------------------------------------------------------- / show errors; -- /