<?xml version="1.0" encoding="UTF-8"?>
<!--
 -
 -  $Id$
 -
 -  This file is part of the OpenLink Software Virtuoso Open-Source (VOS)
 -  project.
 -
 -  Copyright (C) 1998-2018 OpenLink Software
 -
 -  This project is free software; you can redistribute it and/or modify it
 -  under the terms of the GNU General Public License as published by the
 -  Free Software Foundation; only version 2 of the License, dated June 1991.
 -
 -  This program is distributed in the hope that it will be useful, but
 -  WITHOUT ANY WARRANTY; without even the implied warranty of
 -  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 -  General Public License for more details.
 -
 -  You should have received a copy of the GNU General Public License along
 -  with this program; if not, write to the Free Software Foundation, Inc.,
 -  51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
 -
-->
<v:page name="ping-svc-page"
        xmlns:vm="http://www.openlinksw.com/vspx/ods/"
        xmlns:v="http://www.openlinksw.com/vspx/"
        style="index.xsl"
        doctype="-//W3C//DTD XHTML 1.0 Transitional//EN"
        doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  <vm:page>
    <vm:header>
      <vm:title>Application Notification Log</vm:title>
    </vm:header>
    <vm:pagewrapper>
      <vm:navigation on="settings"/>
      <vm:navigation1 on="admin"/>
      <vm:navigation2 on="endpoint"/>
      <vm:rawheader caption="Application Notification Log"/>
      <vm:body>
	  <vm:login redirect="index.vspx"/>
      <div>
	  <label for="log_filt">Show </label>
	  <v:select-list name="log_filt" xhtml_id="log_filt" auto-submit="1">
	      <v:item name="all" value="all"/>
	      <v:item name="pending" value="pending"/>
	      <v:item name="sent" value="sent"/>
	      <v:item name="error" value="error"/>
	  </v:select-list>
      </div>
      <div class="scroll_area">
      <table class="listing">
    <tr class="listing_header_row">
        <th>Application</th>
        <th>Target</th>
        <th>Last change</th>
        <th>Date sent</th>
        <th>State</th>
        <th>Action</th>
    </tr>
    <?vsp
    {
     declare params, j, p, c, h, ts any;
     params := self.vc_event.ve_params;

     j := atoi (get_keyword ('j', params, '0'));
     p := get_keyword ('p', params, '0');
     h := get_keyword ('h', params, '0');
     c := atoi (get_keyword ('c', params, '0'));
     ts := atoi(get_keyword ('ts', params, '0'));

     if ({?'reset'} is not null)
       {
         update ODS..APP_PING_LOG set APL_STAT = 0 where APL_WAI_ID = j and APL_HOST_ID = h and APL_SEQ = ts;
	 commit work;
       }
     else if ({?'delete'} is not null)
       {
         delete from ODS..APP_PING_LOG where APL_WAI_ID = j and APL_HOST_ID = h and APL_SEQ = ts;
	 commit work;
       }

     declare i int;
     declare login_pars any;
     login_pars := '';
     i := 0;
     if (length (self.sid))
       login_pars := sprintf ('&sid=%s&realm=%s', self.sid, self.realm);
     set isolation='committed';

     for select WAI_NAME, APL_STAT, APL_TS, APL_SENT, APL_ERROR, SH_NAME,
       APL_P_TITLE, SH_ID, APL_WAI_ID, APL_SEQ from ODS..APP_PING_LOG,
       ODS..SVC_HOST, DB.DBA.WA_INSTANCE, DB.DBA.WA_MEMBER where
       APL_HOST_ID = SH_ID and APL_WAI_ID = WAI_ID and WAI_NAME = WAM_INST and WAM_USER = self.u_id and WAM_MEMBER_TYPE = 1
       order by APL_TS desc
       do

      {
	declare err, url any;
	err := coalesce (APL_ERROR, '');
	err := regexp_match ('[^\r\n]*', err);

	if (APL_STAT = 0 or APL_STAT is null)
	  err := 'pending';
	else if (APL_STAT = 1)
	  err := 'sent';
	if (self.log_filt.ufl_value = 'error' and APL_ERROR is null)
	  goto skipentry;
	else if (self.log_filt.ufl_value not in ('all', 'error') and self.log_filt.ufl_value <> err)
	  goto skipentry;
    ?>
      <tr class="<?V case when mod(i, 2) then 'listing_row_odd' else 'listing_row_even' end ?>">
    <td><?V WAI_NAME ?></td>
    <td><?V SH_NAME ?></td>
    <td><?V case when APL_TS is not null then wa_abs_date (APL_TS) else '' end ?></td>
    <td><?V case when APL_SENT is not null then wa_abs_date (APL_SENT) else '' end ?></td>
    <td><?V err ?></td>
    <td><![CDATA[
           <?vsp url := sprintf ('ping_log.vspx?j=%d&h=%d&ts=%d%s',
        APL_WAI_ID, SH_ID, APL_SEQ, login_pars); ?>
     <a href="<?vsp http (url); ?>&reset">Reset</a>
     <a href="<?vsp http (url); ?>&delete">Delete</a>
     ]]></td>
      </tr>
    <?vsp
          i := i + 1;
	  skipentry:;
      }
      if (i = 0)
        {
	   http ('<tr><td colspan="7">No ping entries</td></tr>');
        }
    }
    ?>
      </table>
  </div>
      </vm:body>
    </vm:pagewrapper>
  </vm:page>
</v:page>
