<%!

/**********************************************************************
**
**     SAP AG Walldorf
**     (C) Copyright SAP AG 1999-2010
**
***********************************************************************/

#include "publicincl/http_subhdl.inc"

struct icm_cache_status
{
  boolean active;
  int csize;
  int csize_used;
  int max_entries;
  int centries;
  int max_ufo;
  int ufo_entr;
  int noreq_total;
  int noreq_cache;
  int nohits;
  int nomisses;
  int noreq_ufo;
  int nohits_ufo;
  int nohits_mem;
  int noswaps;
};

struct icm_cache_entry
{
  boolean valid;
  int    dsize;
  int    version;
  string exp_time;
  string crea_time;
  string last_acc;
  string filename;
  string name;
};
%>

<%
struct icm_http_subhdl icm_subhdl_tab[];
struct icm_cache_status icm_cache_stat;
struct icm_cache_entry icm_cache_tab[];

string browser, lastControlID;
string hdlsel, tabsel, formfld, ref;
float  hits, misses, hitsmem, ftmp;
int    page_no, i, nr, rc;
int    count = 0;
boolean is_admin;

string tab_hdlsel[];
string tab_header[2];
string tab_content[2];
string tab_tabsel[2];

tab_header[0] = "Settings";
tab_header[1] = "Cache Contents";

tab_tabsel[0] = "tab0";
tab_tabsel[1] = "tab1";

browser = __icm_get_browser_type();
lastControlID = __icm_get_form_field ("lastControlID");


count = __icm_http_hdl (2,icm_subhdl_tab,4);
for (i = 0; i < count; i++) {
  tab_hdlsel[i] = "";
}

is_admin = __icm_get_system_property ("is_admin");
hdlsel = anumenc(__icm_get_form_field ("hdlsel"));
if (hdlsel != "")
  tab_hdlsel[hdlsel] = "selected";
tabsel = anumenc(__icm_get_form_field ("tabsel"));
if (tabsel == "")
  tabsel = "tab0";
  
if (tabsel == "tab0") {
  __icm_cache_hdl (1, hdlsel, icm_cache_stat);
}
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <link rel=stylesheet type="text/css" href="../public/css/controls_<%=browser%>.css">
    <link rel=stylesheet type="text/css" href="../public/css/sapbsp.css">
    <title>Server Cache Status</title>
    <script type="text/javascript" src="../public/js/bspMenu.js"></script>
    <script type="text/javascript">
    <!--
    window.onload = function() {
      initializeMenu ("activeMenu", "activeObj");
      restoreMenuFocus('<%=lastControlID%>');
    }
    document.onclick=bspMenuHide;
    //-->
    </script>
    <script language="JavaScript" type="text/javascript">
    <!--
    function callSubmitAction(hdl,tab,op)
    {
    document.FormTabStrip.hdlsel.value = hdl;
    document.FormTabStrip.tabsel.value = tab;
    document.FormTabStrip.page_op.value = op;
    document.FormTabStrip.submit();
    }
    function callSubmitCombo(form)
    {
	var Form = document[form];
	Form.tabsel.value = '<%=tabsel%>';
	Form.submit();
    }
    function preview(wintype)
    {
      popUp = window.open(wintype, 'Preview', 'toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=yes,resizable=yes,width=400,height=300,left=22,top=22');
      popUp.focus();
    }
    //-->
    </script>
  </head>
    <body class="sapBdy">
    
      <div id="activeMenu" class="bspMenuBox" onMouseover="bspMenuHighlight(event)" onMouseout="bspMenuUnHighlight(event)" onClick="bspMenuSelect(event,'activeMenu')" display:none>
<%
if (icm_cache_stat.active) {
%>
      
      <div title="Deactivate Handler" class="bspMenuItem" url="./confirm.icp?what=deactivate_cache&amp;hdlsel=<%=hdlsel%>">Deactivate Handler</div>
      <hr>
      <div title="Close Menu" class="bspMenuItem">Close Menu</div>
<%
} else {
%>
      <div title="Activate Handler" class="bspMenuItem" url="./confirm.icp?what=activate_cache&amp;hdlsel=<%=hdlsel%>">Activate Handler</div>
      <hr>
      <div title="Close Menu" class="bspMenuItem">Close Menu</div>
<%
}
%>
      </div>
      
    <table border="0" cellspacing="0" cellpadding="0" class="sapTbvAlt" width="100%">
    <tr>
     <form action="" method="GET" name="FormHdl">
     <input type="hidden" name="tabsel" value="">
      <td class="sapTbvCellAlt">
	<b><i>HTTP Server Cache Monitor for &nbsp;
	  <select title="Server Cache" name="hdlsel" class="sapDdlStd"
	    onChange="callSubmitCombo('FormHdl');">
<%
	if (count == 0)
	  __output("<option value=\"0\">icm/HTTP/server_cache_0</option>");
	for (i = 0; i < count; i++) {
%>
	    <option value="<%=i%>" <%=tab_hdlsel[i]%>>icm/HTTP/server_cache_<%=i%></option>
<%
	}
%>
	  </select>
	</i></b>
      </td>
      <td class="sapTbvCellAlt" align="right">
	<nobr>&nbsp;</nobr>
      </td>
      <td class="sapTbvCellAlt" align="right">
	<a href="javascript:location.reload()" class="sapBtnEmph" title="refresh page"><nobr>Refresh</nobr></a>
      </td>
     </form>
    </tr>
    <tr>
    <td class="sapTbvCellStd" Colspan="3">
    <form action="" method="GET" name="FormTabStrip">
      <input type="hidden" name="hdlsel" value="<%=hdlsel%>">
      <input type="hidden" name="tabsel" value="">
      <input type="hidden" name="page_op" value="0">
	<table border="0" cellpadding="0" cellspacing="0" width="100%">
	  <tr>
	    <td valign="top">
	      <br>
		<table border="0" cellpadding="0" cellspacing="0" width="100%">
		  <tr valign="top">
		    <td>
		      <!--HEADERS-->
		      <table border="0" cellpadding="0" cellspacing="0">
			<tr>
			  <!--HEADER ITEM-->
			  <td nowrap></td>
<%
    for (nr = 0; nr < 2; nr++) {
%>
			  <td nowrap
<%
      if (tab_tabsel[nr] == tabsel)
      {
%>
			    class="sapTbsTabSel">
			    <a name="page_top"></a>
			    <a title="<%=tab_header[nr]%>" class="sapLnk" OnMouseOver="window.status = '<%= tab_header[nr] %>'; return true;"
			     style="text-decoration:none">
			     <b>
				<%=tab_header[nr]%>
			      </b>

<%    } 
      else
      {
%>
			    class="sapTbsTab">
			    <a title="<%=tab_header[nr]%>" class="sapLnk" OnMouseOver="window.status = '<%= tab_header[nr] %>'; return true;"
			    href="javascript:callSubmitAction('<%=hdlsel%>','<%= tab_tabsel[nr] %>','')"
			     style="text-decoration:none">
				<%=tab_header[nr]%>
<%    }
%>
			    </a>
			  </td>
<%
    }
%>
			  <!--HEADER ITEM END-->
			  <td nowrap class="sapTbsTabBlk"> </td>
			</tr>
		      </table>
		      <!--HEADER END-->
		      <!--CONTENTS-->
		      <table class="sapTbsWhl" border="0" cellspacing="0" cellpadding="0" width="100%">
			<tr>
			  <td align="left" valign="top">
<%
    if (tabsel == "tab0") {
      rc = __icm_cache_hdl (1, hdlsel, icm_cache_stat);
      if (rc == -1) {
%>
			    <table border="0" cellspacing="0" cellpadding="0" class="sapTbvAlt" width="100%">
			      <tr>
				<td class="sapTbvCellAlt" Colspan="2">
				  <b><i>No information available</i></b>
				</td>
				<td class="sapTbvCellAlt" align="right"></td>
			      </tr>
			    </table>

<%
      } else {
	if (icm_cache_stat.noreq_cache > 0) {
	  ftmp = icm_cache_stat.nohits;
	  hits = ftmp * 100.0 / icm_cache_stat.noreq_cache;
	  misses = 100.0 - hits;
	} else {
	  hits = 0.0;
	  misses = 0.0;
	}

	if (icm_cache_stat.noreq_cache > 0) {
	  ftmp = icm_cache_stat.nohits_mem;
	  hitsmem = ftmp * 100.0 / icm_cache_stat.noreq_cache;
	}
	else {
	  hitsmem = 0.0;
        }
%>
			      <table border=0 cellspacing=1 cellpadding=0 class="sapTbvAlt" width="100%">
				<tr>
				  <td class="sapTbvCellAlt" colspan="3"><i><b>Settings for HTTP Server Cache</b></i></td>
				</tr>
				<tr>
				  <td class="sapTbvCellStd">Cache Handler Status</td>
				  <td class="sapTbvCellStd">
<%
if (icm_cache_stat.active) {
  if (is_admin) {
	    __output("<a title=\"Cache Handler Status Menu\" href=\"javascript:void(0);\" id=\"activeObj\" class=\"sapBtnStd\" onKeyUp=\"bspMenuMainAction('activeMenu', event, this);\" onClick=\"bspMenuMainAction('activeMenu', event, this);\"><i>active</i>");
	    __output("&nbsp;<img border=\"0\" src=\"../public/images/cmenu/Triangle.gif\"></a>");
  } else {
	    __output("<i>active</i>");
  }
	    __output(" <img alt=\"green\" title=\"green\" src=\"../public/icons/s_s_tl_g.gif\">");
} else {
  if (is_admin) {
	    __output("<a title=\"Cache Handler Status Menu\" href=\"javascript:void(0);\" id=\"activeObj\" class=\"sapBtnStd\" onKeyUp=\"bspMenuMainAction('activeMenu', event, this);\" onClick=\"bspMenuMainAction('activeMenu', event, this);\"><i>inactive</i>");
	    __output("&nbsp;<img border=\"0\" src=\"../public/images/cmenu/Triangle.gif\"></a>");
  } else {
	    __output("<i>inactive</i>");
  }
	    __output(" <img alt=\"red\" title=\"red\" src=\"../public/icons/s_s_tl_r.gif\">");
}
%>
				  </td>
				  <td class="sapTbvCellStd">&nbsp;</td>
				</tr>
				<tr>
				  <td class="sapTbvCellAlt" colspan="3">Cache Sizes</td>
				</tr>
				<tr>
				  <td class="sapTbvCellStd">Cache Size (Bytes)</td>
				  <td class="sapTbvCellStd"><%= icm_cache_stat.csize %></td>
				  <td class="sapTbvCellStd">&nbsp;</td>
				</tr>
				<tr>
				  <td class="sapTbvCellStd">Occupied Cache Memory (Bytes)</td>
				  <td class="sapTbvCellStd"><%= icm_cache_stat.csize_used %></td>
				  <td class="sapTbvCellStd">&nbsp;</td>
				</tr>

				<tr>
				  <td class="sapTbvCellAlt" colspan="3">Cache Entries</td>
				</tr>
				<tr>
				  <td class="sapTbvCellStd">Maximum Number of Cache Entries</td>
				  <td class="sapTbvCellStd"><%= icm_cache_stat.max_entries %></td>
				  <td class="sapTbvCellStd">&nbsp;</td>
				</tr>
				<tr>
				  <td class="sapTbvCellStd">Current Number of Cache Entries</td>
				  <td class="sapTbvCellStd"><%= icm_cache_stat.centries %></td>
				  <td class="sapTbvCellStd">&nbsp;</td>
				</tr>
				<tr>
				  <td class="sapTbvCellStd">Number of displaced Cache Entries</td>
				  <td class="sapTbvCellStd"><%= icm_cache_stat.noswaps %></td>
				  <td class="sapTbvCellStd">&nbsp;</td>
				</tr>

				<tr>
				  <td class="sapTbvCellAlt" colspan="3">Cache access statistic</td>
				</tr>
				<tr>
				  <td class="sapTbvCellStd">Total Number of Cache Accesses</td>
				  <td class="sapTbvCellStd"><%= icm_cache_stat.noreq_total %></td>
				  <td class="sapTbvCellStd">&nbsp;</td>
				</tr>
				<tr>
				  <td class="sapTbvCellStd">Number of Cachable Accesses</td>
				  <td class="sapTbvCellStd"><%= icm_cache_stat.noreq_cache %></td>
				  <td class="sapTbvCellStd">&nbsp;</td>
				</tr>
				<tr>
				  <td class="sapTbvCellStd">Number of cache hits</td>
				  <td class="sapTbvCellStd"><%= icm_cache_stat.nohits %></td>
				  <td class="sapTbvCellStd" align="right"> <%=hits%>% </td>
				</tr>
				<tr>
				  <td class="sapTbvCellStd">Number of cache misses</td>
				  <td class="sapTbvCellStd"><%= icm_cache_stat.nomisses %></td>
				  <td class="sapTbvCellStd" align="right"> <%=misses%>% </td>
				</tr>
				<tr>
				  <td class="sapTbvCellStd">Number of cache hits in memory cache</td>
				  <td class="sapTbvCellStd"><%= icm_cache_stat.nohits_mem %></td>
				  <td class="sapTbvCellStd" align="right"> <%=hitsmem%>% </td>
				</tr>

				<tr>
				  <td class="sapTbvCellAlt" colspan="3">Unfound Object (UFO) Cache</td>
				</tr>
				<tr>
				  <td class="sapTbvCellStd">Number of Accesses to UFO List</td>
				  <td class="sapTbvCellStd"><%= icm_cache_stat.noreq_ufo %></td>
				  <td class="sapTbvCellStd">&nbsp;</td>
				</tr>
				<tr>
				  <td class="sapTbvCellStd">Number of UFO Hits</td>
				  <td class="sapTbvCellStd"><%= icm_cache_stat.nohits_ufo %></td>
				  <td class="sapTbvCellStd">&nbsp;</td>
				</tr>
			      </table>
<%
      }
    }
    else
    {
      count = __icm_cache_hdl (2, hdlsel, icm_cache_tab);
%>
    <table border=0 cellspacing=1 cellpadding=0 class="sapTbvAlt" width="100%" rules="rows">
    <tr>
      <td class="sapTbvCellAlt" colspan="2">
        <b><i>Cache Entries</i></b>
      </td>
      <td class="sapTbvCellAlt" align="center" colspan="2">
        <nobr>
          <a accesskey="i" onKeyUp="javascript:callUrlWithKey(event,73,'./confirm.icp?what=inval_cache')"
             href="./confirm.icp?what=inval_cache" class="sapBtnStd"><u>I</u>nvalidate Cache</a>
        </nobr>
      </td>
      <td class="sapTbvCellAlt" align="right" colspan="3">
        <nobr>
          <a href="#page_top"><nobr><img width=15 height=15 src="../public/images/tableview/top_off.gif" BORDER=0></nobr></a>
          <a href="#page_bottom"><nobr><img width=15 height=15 src="../public/images/tableview/bottom.gif" BORDER=0></nobr></a>
      </td>
    </tr>
    <tr>
        <th class="sapTbvCellAlt" align="left" width=10>
          <i>No.</i>
        </th>
        <th class="sapTbvCellAlt" align="left" width=10>
          <i>Valid</i>
        </th>
        <th class="sapTbvCellAlt" align="left" width=250>
          <i>Cache Entry</i>
        </th>
        <th class="sapTbvCellAlt" align="right" width=50>
          <i>Size&nbsp;</i>
        </th>
        <th class="sapTbvCellAlt" align="left" width=100>
          <i>Creation time</i>
        </th>
        <th class="sapTbvCellAlt" align="left" width=100>
          <i>Valid until</i>
        </th>
        <th class="sapTbvCellAlt" align="left" width=20>
          <i>Version</i>
        </th>
    </tr>

<%
    for (nr = 0; nr < count; nr++)
    {
	ref = strtok(icm_cache_tab[nr].name, "&");
%>
      <tr>
        <td class="sapTbvCellStd"><%= nr %></td>
<% if (icm_cache_tab[nr].valid) { %>
        <td class="sapTbvCellStd"><img title="Valid" alt="Valid" src="../public/icons/s_s_okay.gif"></td>
<% } else { %>
        <td class="sapTbvCellStd"><img title="Invalid" alt="Invalid" src="../public/icons/s_s_ledr.gif"></td>
<% } %>
        <td class="sapTbvCellStd">
	  <a href="javascript:preview('<%= ref %>')">
		<%= icm_cache_tab[nr].name %></a>
	</td>
        <td class="sapTbvCellStd" align="right"><%= icm_cache_tab[nr].dsize %>&nbsp;</td>
        <td class="sapTbvCellStd"><%= icm_cache_tab[nr].crea_time %></td>
        <td class="sapTbvCellStd"><%= icm_cache_tab[nr].exp_time %></td>
        <td class="sapTbvCellStd"><%= icm_cache_tab[nr].version %></td>
      </tr>
<%
    }
    if (count > 100) {
%>
    <tr>
      <a name="page_bottom"></a>
      <td class="sapTbvCellAlt" width="150" colspan="2">
        <b><i>Cache Entries</i></b>
      </td>
      <td class="sapTbvCellAlt" align="center" colspan="2">
        <nobr>
          <a href="./confirm.icp?what=inval_cache" class="sapBtnStd"><nobr>Invalidate Cache</nobr></a>
        </nobr>
      </td>
      <td class="sapTbvCellAlt" align="right" colspan="3">
        <nobr>
          <a href="#page_top"><nobr><img width=15 height=15 src="../public/images/tableview/top.gif" BORDER=0></nobr></a>
          <a href="#page_bottom"><nobr><img width=15 height=15 src="../public/images/tableview/bottom_off.gif" BORDER=0></nobr></a>
      </td>
    </tr>
    </table>
<%
	}
    }
%>

			    </table>
			  </td>
			</tr>
		      </table>
		      <!--CONTENTS END-->
		    </td>
		  </tr>
		</table>
	    </td>
	  </tr>
        </table>
      </form>
    </td>
    </tr>
    </table>
  </body>
</html>

