svn path=/Website/trunk/; revision=1511
This commit is contained in:
Peter Feij
2010-04-27 22:19:20 +00:00
parent 9313c92f61
commit a64a47c1f6
6 changed files with 503 additions and 19 deletions

View File

@@ -1,7 +1,7 @@
<%@language = "javascript" %>
<% /*
$Revision: 13 $
$Modtime: 20-04-10 10:13 $
$Revision: 14 $
$Modtime: 28-04-10 0:08 $
File: Facilitor.asp
Status: op te ruimen, styles naar css isoleren
@@ -193,9 +193,17 @@
generateMenu();
%></div><%
}
%>
<iframe src="Backgrounder.asp" style="display:none" ><!--het frame voor alle backgrounderjobs--></iframe>
if (BackgrounderInterval>0) {%>
<iframe id="bgBackgrounder" src="../Fac/Backgrounder.asp" style="display:none"><!--het frame voor alle backgrounderjobs--></iframe>
<% }
if (PerformInterval>0) {%>
<iframe id="bgPerformance" src="../Fac/PerformanceTester.asp" style="display:none"><!--het frame voor performancemetingen--></iframe>
<% }
if (NotifyMessageInterval>0) {%>
<iframe id="bgNotify" src="../Fac/NotifyMessage.asp" style="display:none"><!--het frame voor popupnotificaties--></iframe>
<% } %>
<div id="maintabs" class="ui-layout-center">
<span class="tabcloseall"
title="<%=lcl_close_all_tabs%>"

View File

@@ -0,0 +1,52 @@
<%@language="javascript"%>
<% /*
$Revision: 1 $
$Modtime: 28-04-10 0:14 $
Deze (onzichtbare) file doet iedere <PerformInterval> seconde
een performancemeting (default 6 minuten)
De eerste komt pas na <PerformInterval> seconde!
*/ %>
<!-- #include file="../../cust/install.inc" -->
<html>
<head>
<script>
function perfmon_done() // Wordt door perfmon.asp aangeroepen als klaar.
{
window.status = "";
nextTiming();
}
function startTiming()
{
window.status = "Bezig met een performancemeting...";
document.getElementById("frm").src = "../fac/perfmon.asp?autosave=1";
}
function nextTiming()
{
setTimeout('startTiming()', <%=PerformInterval*1000%>);
}
</script>
</head>
<%
autfunction = "WEB_PERMON";
%>
<!--#include file="../Shared/autlevel.inc"-->
<%
if( thisfunc_enabled && (PerformInterval>0))
{ // Doe een meting
%>
<body bgcolor="#ff0000" onload="nextTiming()">
<BR>In afwachting van een meting over <%=PerformInterval%> seconden
<iframe src="../Shared/empty.html" id="frm">
</body>
<%
}
else
{
__Log("Geen performance meting voor deze gebruiker, geen rechten.");
%><body>User heeft geen meetrechten of perfmon uitgeschakeld.</body>
<%
}
%>
</html>

423
APPL/FAC/perfmon.asp Normal file
View File

@@ -0,0 +1,423 @@
<%@ language = "JavaScript" %>
<% /*
$Revision: 1 $
$Modtime: 28-04-10 0:17 $
File: perfmon.asp
Description: Test Oracle, Webserver and client performance and connection speeds.
Parameters: doSaveTime als 1 dan gaan we opslaan
showDetail als 1 tonen we ook de details
Context: Handmatig opgestart, vanuit Backgrounder.asp of self-submit
Note:
*/ %>
<!-- #include file="../../cust/install.inc" -->
<%
//Response.buffer=false; // Alles direct tonen
if ( Session("customerId") == "")
{
Response.Write("Zorg dat U eerst Facilitor heeft opgestart"); // Inloggen is niet per se nodig
Response.End;
}
oldLog = Session("logging");
var Autosave = Request.QueryString("autosave").Count > 0;
if (Autosave)
{
if (Session("user_key") == "-1"||Session("user_key") == "")
{
Response.Write("Zorg voor autosave U bent ingelogd");
Response.End;
}
if (oldLog&1)
{
__DoLog("Starten performance meting (logging tijdelijk uit)", "#808000");
Session("logging") = 0; // Anders worden we gek
}
}
niFrame = 100; // zoveel iFRAME testen
var mustSave = Request.QueryString("doSaveTime").Count > 0;
var showDetail = Request.QueryString("showDetail").Count > 0;
if (mustSave) // Helemaal klaar.
{
var oldLog = Request.QueryString("oldLog")(1);
Session("logging") = oldLog; // Terugzetten
__Log("==>KLaar met perfmon. Waarden worden opgeslagen.");
var serverStart = Request.QueryString("serverStart");
var serverEnd = (new Date()).valueOf();
bodyTxt = "Dit duurde " + (serverEnd - serverStart) + "ms "
+ " en moeten we misschien opslaan in de database"
var sql = "INSERT INTO fac_perfmon_sample("
+ " fac_perfmon_sample_datum,"
+ " fac_perfmon_sample_waarde1, "
+ " fac_perfmon_sample_waarde2, "
+ " fac_perfmon_sample_waarde3, "
+ " fac_perfmon_sample_waarde4, "
+ " fac_perfmon_sample_waarde5, "
+ " fac_perfmon_sample_waarde6, "
+ " fac_perfmon_sample_waarde7, "
+ " fac_perfmon_sample_waarde8, "
+ " fac_perfmon_sample_waarde9, "
+ " prs_perslid_key, fac_perfmon_sample_ip, "
+ " fac_perfmon_sample_opmerking)"
+ " VALUES(SYSDATE,"
+ Request.QueryString("t1") + ","
+ Request.QueryString("t2") + ","
+ Request.QueryString("t3") + ","
+ Request.QueryString("t4") + ","
+ Request.QueryString("t5") + ","
+ Request.QueryString("t6") + ","
+ Request.QueryString("t7") + ","
+ Request.QueryString("t8") + ","
+ (serverEnd - serverStart) + ","
+ Session("user_key") + ",'" + Request.ServerVariables("REMOTE_ADDR") + "',"
+ "'Backgrounder.asp;$Revision: 1 $')"
Oracle.Execute(sql);
%> <emp>Waarden zijn opgeslagen</emp>
<script>
if (parent && parent.perfmon_done)
parent.perfmon_done();
</script>
<% Response.End;
}
var serverStart = (new Date()).valueOf();
var t1; // A Database
var t2; // B Database response 1
var t3; // B Database speed 2
var t4; // C Webserver speed
var t5; // D Webserver->client speed
var t6; // D Webserver->client response
var t7; // E Client speed
var t8; // Hele pad
function toMillisec(sTime)
{
return(Math.floor(sTime*1000));
}
%>
<html>
<head>
<script>
var iframeStart=-1;
var onloadCnt=0;
var mode=-1; // zie StartIframeTiming
function StartListboxTiming()
{
var lbStart = new Date();
var lbEnd;
var cnt = 0;
var sel = document.getElementById("frmSelect");
do
{
sel.options[sel.options.length] = new Option("Nummer "+cnt);
cnt ++;
lbEnd = new Date();
} while ((lbEnd - lbStart) < 250)
t7 = (1000*(lbEnd - lbStart) / cnt).toFixed(0);
document.getElementById("cntListbox").innerHTML = ""+t7+"ms";
document.getElementById("cntListboxTot").innerHTML = ""+t7;
}
// mode==1: gebruik perfmon.gif (25K, cache-baar) en ga na afloop door met mode==2
// mode==2: gebruik photo.asp en na afloop ben je klaar
function StartIframeTiming(pMode)
{
mode=pMode;
iframeStart = new Date();
onloadCnt = 0;
for (i=0; i < <%=niFrame%>; i++)
if (mode==1)
document.getElementById("imgfr"+i).src = "../Pictures/perfmon.gif";
else
// document.getElementById("ifr"+i).src = "../res/photo.asp?room=-"+Math.floor(Math.random()*10000)+"&dt=" + (new Date()).valueOf();
document.getElementById("ifr"+i).src = "../res/get_res_info_ajax.asp?req_info=res_ruimte&res_ruimte_key=-"+Math.floor(Math.random()*10000)+"&dt=" + (new Date()).valueOf();
}
function SetPicture(vimage,vremark) // Photo.asp callback
{
}
function IframeLoaded()
{
if (mode>0)
{
onloadCnt++;
if (onloadCnt==<%=niFrame%>)
{
var iframeEnd = new Date();
if (mode==1)
{
t6 = (10*(iframeEnd - iframeStart) / <%=niFrame%>).toFixed(0);
document.getElementById("cntFrames").innerHTML = ""+t6+"ms";
document.getElementById("cntFramesTot").innerHTML = ""+t6;
StartIframeTiming(2); // Ga door met empty.asp
}
else // We zijn echt helemaal klaar met alles.
{
t8 = (10*(iframeEnd - iframeStart) / <%=niFrame%>).toFixed(0);
document.getElementById("cntFrames2").innerHTML = ""+t8+"ms";
document.getElementById("cntFramesTot2").innerHTML = ""+t8;
document.getElementById("txtMeting").innerHTML = "Meting is klaar.";
<%
if (Autosave)
Response.Write("doSubmit();");
%>
}
}
}
}
function bodyOnload()
{
StartListboxTiming(); // Deze eerst zodat hij de andere, a-synchrone niet beinvloedt
StartIframeTiming(1);
document.getElementById("cntSpeedTot").innerHTML = ""+t5; // Nu is het form er pas
}
</script>
<style>
*, body {font-family: Arial; font-size: 9pt;}
table {width:800px;}
#perfresult {border:2px solid blue;}
#perfresult th { border-bottom: 1px solid blue; padding: 1px 4px 3px 3px; text-align: left; }
#perfresult td { border: 1px solid red; padding: 4px; width: 60px; text-align: center;}
#perfresult td.info { border: 0px; padding: 4px; text-align: left; width: 120px;}
</style>
</head>
<body onload="bodyOnload()">
<div id=txtMeting>Measuring....</div>
<div <%=showDetail?"":"style=display:none"%>>
<%
// Hoe vaak kan ik <sql> uitvoeren in <maxtime> milliseconde seconde?
function CountSQL(descr, sql, maxtime)
{
var cnt = 0;
var sDate = new Date();
do
{
oRs = Oracle.RealConnection.Execute(sql); // RealExecution voorkomt overhead van logging
cnt ++;
var endDate = new Date();
} while ((endDate - sDate) < maxtime)
t2 = toMillisec(maxtime/cnt);
Response.Write("<tr><td>"+ descr + "</td><td align=right>" + t2 +"ms</td>");
return cnt;
}
var startDate = new Date();
%>
<% // =========================================================================================== %>
<table>
<tr><td><b>Facilitor environment performance indication</b><br><%= startDate%></td></tr>
<tr><td><img src=../Pictures/perfmon.png></td></tr>
</table>
<% // =========================================================================================== %>
<table>
<tr><td colspan=3><b>A) Database activitijd 1</b>
<br>Hier wordt getest hoe snel de databaseserver records aan een tabel kan toevoegen.</td></tr>
<%
Oracle.Execute("DELETE FROM FAC_RAPPORT WHERE fac_rapport_node = " + Session.SessionID)
sql = "DECLARE "
+ " tstart INTEGER; "
+ " teind INTEGER; "
+ " cnt INTEGER; "
+ "BEGIN "
+ " cnt := 0; "
+ " SELECT dbms_utility.get_time() " // Niet iedereen heeft rechten op v$timer
+ " INTO tstart "
+ " FROM dual; "
+ " teind := tstart; "
+ " WHILE (teind - tstart < 25) " // 25/100 seconde lang testen
+ " LOOP "
+ " INSERT INTO fac_rapport "
+ " (fac_rapport_node, fac_rapport_volgnr, "
+ " fac_rapport_regel, "
+ " fac_rapport_soort "
+ " ) "
+ " VALUES ("+Session.SessionID+", cnt, "
+ " 'Performance test' "
+ " || TO_CHAR (SYSDATE, 'YYYY-MM-DD HH24:MI'), "
+ " 2 "
+ " ); "
+ " cnt := cnt + 1; "
+ " SELECT dbms_utility.get_time() "
+ " INTO teind "
+ " FROM dual; "
+ " COMMIT;" // Zodat we zo kunnen gaan tellen
+ " END LOOP; "
+ "END; "
oRs = Oracle.Execute(sql);
oRs = Oracle.Execute("SELECT COUNT(*) FROM FAC_RAPPORT WHERE fac_rapport_node = " + Session.SessionID);
t1=toMillisec(250/oRs(0));
Response.Write("<tr><td>1000 records toevoegen</td><td align=right>" + t1 + "ms</td></tr>");
%>
</table>
<% // =========================================================================================== %>
<table>
<tr><td colspan=3><b>B) Database responsetijd</b>
<br>Hier wordt getest hoe snel vanuit de webserver een verbinding met
<br>de database kan worden opgezet.</td></tr>
<%
CountSQL("1000 verbindingen", "SELECT SYSDATE FROM DUAL", 250)
%>
</table>
<% // =========================================================================================== %>
<table>
<tr><td colspan=3><b>B) Database activitijd 2</b>
<br>Hier wordt getest hoe snel de webserver records uit de database kan halen.</td></tr>
<%
oRs = Oracle.Execute("SELECT * FROM FAC_RAPPORT WHERE fac_rapport_node = " + Session.SessionID);
var sDate = new Date();
var endDate = new Date();
var cnt =0;
while (endDate - sDate < 250 && !oRs.eof)
{
var endDate = new Date();
oRs.MoveNext();
cnt ++;
}
t3 = toMillisec(10*(endDate - sDate)/cnt);
Response.Write("<tr><td>10000 records ophalen:</td><td align=right>" + t3 + "ms</td></tr>");
Oracle.Execute("DELETE FROM FAC_RAPPORT WHERE fac_rapport_node = " + Session.SessionID) // Opruimen
%>
</table>
<% // =========================================================================================== %>
<table>
<tr><td colspan=3><b>C) Webserver snelheid</b>
<br>Hier wordt getest hoe snel de webserver strings kan opbouwen.</td></tr>
<%
var sDate = new Date();
var endDate = new Date();
var cnt =0;
while (endDate - sDate < 250)
{
var endDate = new Date();
var s="";
while (s.length < 1000)
s += "X";
cnt ++;
}
t4=toMillisec((endDate - sDate)/cnt/4);
Response.Write("<tr><td>250 grote strings opbouwen:</td><td align=right>" + t4 + "ms</td></tr>");
%>
</table>
<% // =========================================================================================== %>
<table>
<tr><td colspan=3><b>D) Netwerksnelheid</b>
<br>Hier wordt getest hoe snel data over het (inter/intra)netwerk wordt getransporteerd.</td></tr>
<tr><td>Overhalen 1MB kilobyte aan (verborgen) data:</td><td><div id=cntSpeed>Bezig..</div></td></tr>
<script>var sDate = new Date();</script>
<%
var bigdata = "<div style='display:none'>"
while (bigdata.length < 1024) bigdata+=String(Math.random()*10);
bigdata+="</div>"
for (i=0; i<=1024; i++)
{
Response.Write(bigdata);
}
%>
<script>var eDate = new Date();
t5 = (eDate - sDate);
document.getElementById("cntSpeed").innerHTML = ""+t5+"ms";
// die is er nog niet document.getElementById("cntSpeedTot").innerHTML = ""+t5;
</script>
</table>
<% // =========================================================================================== %>
<% for (i=0; i < niFrame; i++) { %>
<IFRAME src="../shared/empty.html" id=ifr<%=i%> onload="IframeLoaded()" style="display:none"></IFRAME>
<IMG id=imgfr<%=i%> onload="IframeLoaded()" style="display:none">
<% } %>
<table>
<tr><td colspan=3><b>D) Webserver responsetijd</b><br>Hier wordt getest hoe snel vanuit de client een verbinding met de webserver kan worden opgezet.</td></tr>
<tr><td>10 cachebare pagina's ophalen:</td><td><div id=cntFrames></div></td></tr>
</table>
<% // =========================================================================================== %>
<FORM><SELECT id=frmSelect style='display:none'></SELECT></FORM>
<table>
<tr><td colspan=3><b>E) Client snelheid</b><br>Hier wordt getest hoe snel de client een listbox kan vullen.</td></tr>
<tr><td>1000 items aan listbox toevoegen:</td><td><div id=cntListbox></div></td></tr>
</table>
<% // =========================================================================================== %>
<table>
<tr><td colspan=3><b>A-E) Gehele pad</b><br>Hier wordt vanuit de client aan de database wat gevraagd.</td></tr>
<tr><td>10 niet cachebare pagina's ophalen incl. database:</td><td><div id=cntFrames2></div></td></tr>
</table>
<% // =========================================================================================== %>
</div>
<b>Systeeminformatie:</b>
<table>
<tr><td>Database:</td><td><%=Oracle.RealConnection.Properties("User Name")%></td></tr>
<tr><td>DBMS Name:</td><td><%=Oracle.RealConnection.Properties("DBMS Name")%></td></tr>
<tr><td>DBMS Version:</td><td><%=Oracle.RealConnection.Properties("DBMS Version")%></td></tr>
<tr><td>ADO Version:</td><td><%=Oracle.RealConnection.Version%></td></tr>
<tr><td>Provider Version:</td><td><%=Oracle.RealConnection.Properties("Provider Version")%></td></tr>
<tr><td>Provider Name:</td><td><%=Oracle.RealConnection.Properties("Provider Name")%></td></tr>
<tr><td>OLE DB Version:</td><td><%=Oracle.RealConnection.Properties("OLE DB Version")%></td></tr>
<tr><td>Web server:</td><td><%=Request.ServerVariables("SERVER_SOFTWARE")%></td></tr>
<tr><td>Client browser:</td><td><%=Request.ServerVariables("HTTP_USER_AGENT")%></td></tr>
</table>
<b>Meetresultaten:</b>
<table id="perfresult">
<tr><th>date</th>
<th>id</th>
<th>IP</th>
<th>t1</th>
<th>t2</th>
<th>t3</th>
<th>t4</th>
<th>t5</th>
<th>t6</th>
<th>t7</th>
<th>t8</th>
</tr>
<tr><td class="info"><%=toDateTimeString(new Date(serverStart), 1)%></td>
<td class="info"><%=Session("user_key")%></td>
<td class="info"><%=Request.ServerVariables("REMOTE_ADDR")%></td>
<td><%=t1%></td>
<td><%=t2%></td>
<td><%=t3%></td>
<td><%=t4%></td>
<td id=cntSpeedTot>...</td>
<td id=cntFramesTot>...</td>
<td id=cntListboxTot>...</td>
<td id=cntFramesTot2>...</td>
</tr>
</table>
<table>
<%
Response.Write("<tr><td colspan=3><small>Facilitor 5i perfmon $Revision: 1 $</small></td></tr>")
%>
</table>
<script>
function doSubmit()
{
frm = document.getElementById("Performform");
frm.t5.value = t5;
frm.t6.value = t6;
frm.t7.value = t7;
frm.t8.value = t8;
frm.submit();
}
</script>
<form name=Performform>
<input type=hidden name=doSaveTime value=1>
<input type=hidden name=serverStart value=<%=serverStart%>>
<input type=hidden name=t1 value=<%=t1%>>
<input type=hidden name=t2 value=<%=t2%>>
<input type=hidden name=t3 value=<%=t3%>>
<input type=hidden name=t4 value=<%=t4%>>
<input type=hidden name=t5>
<input type=hidden name=t6>
<input type=hidden name=t7>
<input type=hidden name=t8>
<input type=hidden name=oldLog value=<%=oldLog%>>
<xxinput type=button onClick="doSubmit()" value="Nu opslaan">
</form>
</body>
</html>

BIN
APPL/Pictures/perfmon.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

BIN
APPL/Pictures/perfmon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 763 B

View File

@@ -1,7 +1,7 @@
<%
/*
$Revision: 20 $
$Modtime: 26-04-10 12:47 $
$Revision: 21 $
$Modtime: 27-04-10 23:56 $
File: res.inc
Description: defines usefull timestamps (both serverside and clientside)
@@ -86,22 +86,23 @@ res = {
+ " COALESCE(res_ruimte_eindtijd, " + res_t2 + ") eindtijd,"
+ " rr.res_discipline_key"
+ " FROM res_ruimte rr, res_disc_params rdp, res_discipline rd"
+ " WHERE rr.RES_RUIMTE_KEY = " + res_ruimte_key
+ " WHERE rr.res_ruimte_key = " + res_ruimte_key
+ " AND rr.res_discipline_key = rd.ins_discipline_key "
+ " AND rr.res_discipline_key = rdp.res_ins_discipline_key"
var oRs = Oracle.Execute( sql );
result.ruimte_nr = oRs("res_ruimte_nr").Value,
result.ruimte_omschrijving = oRs("res_ruimte_omschrijving").Value,
result.aantalreq = oRs("res_disc_params_aantalreq").Value;
result.kosten = oRs("res_disc_params_kosten").Value;
result.kpnverplicht = oRs("ins_discipline_kpnverplicht").Value;
result.discipline_key = oRs("res_discipline_key").Value;
result.begintijd = oRs("begintijd").Value;
result.eindtijd = oRs("eindtijd").Value;
if (result.begintijd < res_t1) result.begintijd = res_t1;
if (result.eindtijd > res_t2) result.eindtijd = res_t2;
if (result.begintijd > result.eindtijd) result.begintijd = result.eindtijd;
if (!oRs.eof) {
result.ruimte_nr = oRs("res_ruimte_nr").Value,
result.ruimte_omschrijving = oRs("res_ruimte_omschrijving").Value,
result.aantalreq = oRs("res_disc_params_aantalreq").Value;
result.kosten = oRs("res_disc_params_kosten").Value;
result.kpnverplicht = oRs("ins_discipline_kpnverplicht").Value;
result.discipline_key = oRs("res_discipline_key").Value;
result.begintijd = oRs("begintijd").Value;
result.eindtijd = oRs("eindtijd").Value;
if (result.begintijd < res_t1) result.begintijd = res_t1;
if (result.eindtijd > res_t2) result.eindtijd = res_t2;
if (result.begintijd > result.eindtijd) result.begintijd = result.eindtijd;
}
var sql = "select RES_RUIMTE_OPSTEL_KEY,"
+ " RES_RUIMTE_OPSTEL_BEZOEKERS,"
+ " RES_RUIMTE_OPSTEL_DEFAULT,"