<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!-- NewPage -->
<html lang="en">
<head>
<!-- Generated by javadoc (1.8.0_265) on Tue Aug 25 19:30:51 UTC 2020 -->
<title>EventLog (MetaCat API)</title>
<meta name="date" content="2020-08-25">
<link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
<script type="text/javascript" src="../../../../script.js"></script>
</head>
<body>
<script type="text/javascript"><!--
    try {
        if (location.href.indexOf('is-external=true') == -1) {
            parent.document.title="EventLog (MetaCat API)";
        }
    }
    catch(err) {
    }
//-->
var methods = {"i0":10,"i1":10,"i2":9,"i3":10,"i4":10,"i5":10};
var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
var altColor = "altColor";
var rowColor = "rowColor";
var tableTab = "tableTab";
var activeTableTab = "activeTableTab";
</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="topNav"><a name="navbar.top">
<!--   -->
</a>
<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
<a name="navbar.top.firstrow">
<!--   -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../../overview-summary.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="class-use/EventLog.html">Use</a></li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../../index-all.html">Index</a></li>
<li><a href="../../../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList">
<li><a href="../../../../edu/ucsb/nceas/metacat/ErrorHandledException.html" title="class in edu.ucsb.nceas.metacat"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
<li><a href="../../../../edu/ucsb/nceas/metacat/EventLogData.html" title="class in edu.ucsb.nceas.metacat"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../../index.html?edu/ucsb/nceas/metacat/EventLog.html" target="_top">Frames</a></li>
<li><a href="EventLog.html" target="_top">No&nbsp;Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_top">
<li><a href="../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
  allClassesLink = document.getElementById("allclasses_navbar_top");
  if(window==top) {
    allClassesLink.style.display = "block";
  }
  else {
    allClassesLink.style.display = "none";
  }
  //-->
</script>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li>Nested&nbsp;|&nbsp;</li>
<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
<a name="skip.navbar.top">
<!--   -->
</a></div>
<!-- ========= END OF TOP NAVBAR ========= -->
<!-- ======== START OF CLASS DATA ======== -->
<div class="header">
<div class="subTitle">edu.ucsb.nceas.metacat</div>
<h2 title="Class EventLog" class="title">Class EventLog</h2>
</div>
<div class="contentContainer">
<ul class="inheritance">
<li>java.lang.Object</li>
<li>
<ul class="inheritance">
<li>edu.ucsb.nceas.metacat.EventLog</li>
</ul>
</li>
</ul>
<div class="description">
<ul class="blockList">
<li class="blockList">
<hr>
<br>
<pre>public class <span class="typeNameLabel">EventLog</span>
extends java.lang.Object</pre>
<div class="block">EventLog is used to intialize and store a log of events that occur in an
 application. The events are registered with the logger as they occur, but
 EventLog writes them to permenant storage when it is most convenient or
 efficient. EventLog is a Singleton as there should always be only one object
 for these logging events.
 
 TODO: Logging to the database needn't be synchronous with the event.  
 Instead, a separate thread can be launched that periodically sleeps and only
 wakes periodically to see if metacat is idle.  The log event can be cached
 and inserted later when the thread wakes and finds metacat idle.
 
 TODO: Write a function that archives a part of the log table to an 
 external text file so that the log table doesn't get to big.  This 
 function should be able to be called manually or on a schedule. 
 
 TODO: Write an access function that returns an XML report for a
 specific subset of events.  Users should be able to query on
 principal, docid/rev, date, event, and possibly other fields.</div>
<dl>
<dt><span class="simpleTagLabel">Author:</span></dt>
<dd>jones</dd>
</dl>
</li>
</ul>
</div>
<div class="summary">
<ul class="blockList">
<li class="blockList">
<!-- =========== FIELD SUMMARY =========== -->
<ul class="blockList">
<li class="blockList"><a name="field.summary">
<!--   -->
</a>
<h3>Field Summary</h3>
<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Field Summary table, listing fields, and an explanation">
<caption><span>Fields</span><span class="tabEnd">&nbsp;</span></caption>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colLast" scope="col">Field and Description</th>
</tr>
<tr class="altColor">
<td class="colFirst"><code>static java.lang.String</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../edu/ucsb/nceas/metacat/EventLog.html#DELETE">DELETE</a></span></code>&nbsp;</td>
</tr>
</table>
</li>
</ul>
<!-- ========== METHOD SUMMARY =========== -->
<ul class="blockList">
<li class="blockList"><a name="method.summary">
<!--   -->
</a>
<h3>Method Summary</h3>
<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t1" class="tableTab"><span><a href="javascript:show(1);">Static Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colLast" scope="col">Method and Description</th>
</tr>
<tr id="i0" class="altColor">
<td class="colFirst"><code>org.dataone.service.types.v2.Log</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../edu/ucsb/nceas/metacat/EventLog.html#getD1Report-java.lang.String:A-java.lang.String:A-java.lang.String:A-java.lang.String-java.sql.Timestamp-java.sql.Timestamp-boolean-java.lang.Integer-java.lang.Integer-">getD1Report</a></span>(java.lang.String[]&nbsp;ipAddress,
           java.lang.String[]&nbsp;principal,
           java.lang.String[]&nbsp;docid,
           java.lang.String&nbsp;event,
           java.sql.Timestamp&nbsp;startDate,
           java.sql.Timestamp&nbsp;endDate,
           boolean&nbsp;anonymous,
           java.lang.Integer&nbsp;start,
           java.lang.Integer&nbsp;count)</code>&nbsp;</td>
</tr>
<tr id="i1" class="rowColor">
<td class="colFirst"><code>java.util.Map&lt;java.lang.String,java.util.List&lt;java.lang.Object&gt;&gt;</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../edu/ucsb/nceas/metacat/EventLog.html#getIndexFields-org.dataone.service.types.v1.Identifier-java.lang.String-">getIndexFields</a></span>(org.dataone.service.types.v1.Identifier&nbsp;pid,
              java.lang.String&nbsp;event)</code>&nbsp;</td>
</tr>
<tr id="i2" class="altColor">
<td class="colFirst"><code>static <a href="../../../../edu/ucsb/nceas/metacat/EventLog.html" title="class in edu.ucsb.nceas.metacat">EventLog</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../edu/ucsb/nceas/metacat/EventLog.html#getInstance--">getInstance</a></span>()</code>
<div class="block">Return the single instance of the event log after initializing it if it
 wasn't previously initialized.</div>
</td>
</tr>
<tr id="i3" class="rowColor">
<td class="colFirst"><code>java.lang.String</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../edu/ucsb/nceas/metacat/EventLog.html#getReport-java.lang.String:A-java.lang.String:A-java.lang.String:A-java.lang.String:A-java.sql.Timestamp-java.sql.Timestamp-boolean-">getReport</a></span>(java.lang.String[]&nbsp;ipAddress,
         java.lang.String[]&nbsp;principal,
         java.lang.String[]&nbsp;docid,
         java.lang.String[]&nbsp;event,
         java.sql.Timestamp&nbsp;startDate,
         java.sql.Timestamp&nbsp;endDate,
         boolean&nbsp;anonymous)</code>
<div class="block">Get a report of the log events that match a set of filters.</div>
</td>
</tr>
<tr id="i4" class="altColor">
<td class="colFirst"><code>boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../edu/ucsb/nceas/metacat/EventLog.html#isDeleted-java.lang.String-">isDeleted</a></span>(java.lang.String&nbsp;docid)</code>
<div class="block">A utility method to determine if the given docid was deleted.</div>
</td>
</tr>
<tr id="i5" class="rowColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../edu/ucsb/nceas/metacat/EventLog.html#log-java.lang.String-java.lang.String-java.lang.String-java.lang.String-java.lang.String-">log</a></span>(java.lang.String&nbsp;ipAddress,
   java.lang.String&nbsp;userAgent,
   java.lang.String&nbsp;principal,
   java.lang.String&nbsp;docid,
   java.lang.String&nbsp;event)</code>
<div class="block">Log an event of interest to the application.</div>
</td>
</tr>
</table>
<ul class="blockList">
<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
<!--   -->
</a>
<h3>Methods inherited from class&nbsp;java.lang.Object</h3>
<code>clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</code></li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
<div class="details">
<ul class="blockList">
<li class="blockList">
<!-- ============ FIELD DETAIL =========== -->
<ul class="blockList">
<li class="blockList"><a name="field.detail">
<!--   -->
</a>
<h3>Field Detail</h3>
<a name="DELETE">
<!--   -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>DELETE</h4>
<pre>public static final&nbsp;java.lang.String DELETE</pre>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../constant-values.html#edu.ucsb.nceas.metacat.EventLog.DELETE">Constant Field Values</a></dd>
</dl>
</li>
</ul>
</li>
</ul>
<!-- ============ METHOD DETAIL ========== -->
<ul class="blockList">
<li class="blockList"><a name="method.detail">
<!--   -->
</a>
<h3>Method Detail</h3>
<a name="getInstance--">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getInstance</h4>
<pre>public static&nbsp;<a href="../../../../edu/ucsb/nceas/metacat/EventLog.html" title="class in edu.ucsb.nceas.metacat">EventLog</a>&nbsp;getInstance()</pre>
<div class="block">Return the single instance of the event log after initializing it if it
 wasn't previously initialized.</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>the single EventLog instance</dd>
</dl>
</li>
</ul>
<a name="log-java.lang.String-java.lang.String-java.lang.String-java.lang.String-java.lang.String-">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>log</h4>
<pre>public&nbsp;void&nbsp;log(java.lang.String&nbsp;ipAddress,
                java.lang.String&nbsp;userAgent,
                java.lang.String&nbsp;principal,
                java.lang.String&nbsp;docid,
                java.lang.String&nbsp;event)</pre>
<div class="block">Log an event of interest to the application. The information logged can
 include basic identification information about the principal or computer
 that initiated the event.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>ipAddress</code> - the internet protocol address for the event</dd>
<dd><code>userAgent</code> - the agent making the request</dd>
<dd><code>principal</code> - the principal for the event (a username, etc)</dd>
<dd><code>docid</code> - the identifier of the document to which the event applies</dd>
<dd><code>event</code> - the string code for the event</dd>
</dl>
</li>
</ul>
<a name="getIndexFields-org.dataone.service.types.v1.Identifier-java.lang.String-">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getIndexFields</h4>
<pre>public&nbsp;java.util.Map&lt;java.lang.String,java.util.List&lt;java.lang.Object&gt;&gt;&nbsp;getIndexFields(org.dataone.service.types.v1.Identifier&nbsp;pid,
                                                                                       java.lang.String&nbsp;event)</pre>
</li>
</ul>
<a name="getReport-java.lang.String:A-java.lang.String:A-java.lang.String:A-java.lang.String:A-java.sql.Timestamp-java.sql.Timestamp-boolean-">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getReport</h4>
<pre>public&nbsp;java.lang.String&nbsp;getReport(java.lang.String[]&nbsp;ipAddress,
                                  java.lang.String[]&nbsp;principal,
                                  java.lang.String[]&nbsp;docid,
                                  java.lang.String[]&nbsp;event,
                                  java.sql.Timestamp&nbsp;startDate,
                                  java.sql.Timestamp&nbsp;endDate,
                                  boolean&nbsp;anonymous)</pre>
<div class="block">Get a report of the log events that match a set of filters.  The
 filter parameters can be null; log records are subset based on
 non-null filter parameters.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>ipAddress</code> - the internet protocol address for the event</dd>
<dd><code>principal</code> - the principal for the event (a username, etc)</dd>
<dd><code>docid</code> - the identifier of the document to which the event applies</dd>
<dd><code>event</code> - the string code for the event</dd>
<dd><code>startDate</code> - beginning of date range for query</dd>
<dd><code>endDate</code> - end of date range for query</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>an XML-formatted report of the access log entries</dd>
</dl>
</li>
</ul>
<a name="isDeleted-java.lang.String-">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>isDeleted</h4>
<pre>public&nbsp;boolean&nbsp;isDeleted(java.lang.String&nbsp;docid)</pre>
<div class="block">A utility method to determine if the given docid was deleted.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>docid</code> - the specified docid</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>true if there is a delete event for the id; false otherwise.</dd>
</dl>
</li>
</ul>
<a name="getD1Report-java.lang.String:A-java.lang.String:A-java.lang.String:A-java.lang.String-java.sql.Timestamp-java.sql.Timestamp-boolean-java.lang.Integer-java.lang.Integer-">
<!--   -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>getD1Report</h4>
<pre>public&nbsp;org.dataone.service.types.v2.Log&nbsp;getD1Report(java.lang.String[]&nbsp;ipAddress,
                                                    java.lang.String[]&nbsp;principal,
                                                    java.lang.String[]&nbsp;docid,
                                                    java.lang.String&nbsp;event,
                                                    java.sql.Timestamp&nbsp;startDate,
                                                    java.sql.Timestamp&nbsp;endDate,
                                                    boolean&nbsp;anonymous,
                                                    java.lang.Integer&nbsp;start,
                                                    java.lang.Integer&nbsp;count)</pre>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
</div>
<!-- ========= END OF CLASS DATA ========= -->
<!-- ======= START OF BOTTOM NAVBAR ====== -->
<div class="bottomNav"><a name="navbar.bottom">
<!--   -->
</a>
<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
<a name="navbar.bottom.firstrow">
<!--   -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../../overview-summary.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="class-use/EventLog.html">Use</a></li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../../index-all.html">Index</a></li>
<li><a href="../../../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList">
<li><a href="../../../../edu/ucsb/nceas/metacat/ErrorHandledException.html" title="class in edu.ucsb.nceas.metacat"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
<li><a href="../../../../edu/ucsb/nceas/metacat/EventLogData.html" title="class in edu.ucsb.nceas.metacat"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../../index.html?edu/ucsb/nceas/metacat/EventLog.html" target="_top">Frames</a></li>
<li><a href="EventLog.html" target="_top">No&nbsp;Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_bottom">
<li><a href="../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
  allClassesLink = document.getElementById("allclasses_navbar_bottom");
  if(window==top) {
    allClassesLink.style.display = "block";
  }
  else {
    allClassesLink.style.display = "none";
  }
  //-->
</script>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li>Nested&nbsp;|&nbsp;</li>
<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
<a name="skip.navbar.bottom">
<!--   -->
</a></div>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<p class="legalCopy"><small><i>Copyright © 2020 Regents of the University of California. All Rights Reserved.</i></small></p>
</body>
</html>