Changeset 8120


Ignore:
Timestamp:
Mar 7, 2023, 10:40:50 AM (7 months ago)
Author:
Nicklas Nordborg
Message:

References #2295: Add API for services to send log messages that can be displayed by the web client

Added a function for clearing the log.

Location:
branches/3.19-stable
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • branches/3.19-stable/src/clients/web/net/sf/basedb/clients/web/extensions/service/ServiceLog.java

    r8119 r8120  
    2828import java.util.Map;
    2929import java.util.concurrent.ConcurrentLinkedDeque;
     30import java.util.concurrent.locks.Lock;
     31import java.util.concurrent.locks.ReadWriteLock;
     32import java.util.concurrent.locks.ReentrantReadWriteLock;
    3033
    3134import org.apache.commons.collections4.iterators.UnmodifiableIterator;
     
    7578  private final String extensionId;
    7679  private final Deque<LogEntry> logEntries;
     80  private final ReadWriteLock lock;
    7781 
    7882  private int maxEntries;
     
    8892    this.logEntries = new ConcurrentLinkedDeque<>();
    8993    this.maxEntries = 200;
     94    this.lock = new ReentrantReadWriteLock();
    9095  }
    9196 
     
    144149  {
    145150    return numErrors;
     151  }
     152 
     153  /**
     154    Clear the log.
     155  */
     156  public void clearLog()
     157  {
     158    // We need the write lock here since we are changing multiple properties
     159    Lock l = lock.writeLock();
     160    try
     161    {
     162      l.lock();
     163      logEntries.clear();
     164      numEntries = 0;
     165      numWarnings = 0;
     166      numErrors = 0;
     167    }
     168    finally
     169    {
     170      l.unlock();
     171    }
    146172  }
    147173 
     
    160186  void add(LogEntry entry)
    161187  {
    162     if (entry.level == LogLevel.DEBUG && !isDebugEnabled) return; //
    163     logEntries.addFirst(entry);
    164     if (entry.level == LogLevel.WARNING) numWarnings++;
    165     if (entry.level == LogLevel.ERROR) numErrors++;
    166 
    167     if (numEntries++ > maxEntries)
    168     {
    169       // Remove one entry
    170       numEntries--;
    171       LogEntry last = logEntries.removeLast();
    172       if (last.level == LogLevel.WARNING) numWarnings--;
    173       if (last.level == LogLevel.ERROR) numErrors--;
     188    // A read lock should be enough since we are using a ConcurrentLinkedDeque that supports multiple threads
     189    Lock l = lock.readLock();
     190    try
     191    {
     192      l.lock();
     193      if (entry.level == LogLevel.DEBUG && !isDebugEnabled) return; //
     194      logEntries.addFirst(entry);
     195      if (entry.level == LogLevel.WARNING) numWarnings++;
     196      if (entry.level == LogLevel.ERROR) numErrors++;
     197 
     198      if (numEntries++ > maxEntries)
     199      {
     200        // Remove one entry
     201        numEntries--;
     202        LogEntry last = logEntries.removeLast();
     203        if (last.level == LogLevel.WARNING) numWarnings--;
     204        if (last.level == LogLevel.ERROR) numErrors--;
     205      }
     206    }
     207    finally
     208    {
     209      l.unlock();
    174210    }
    175211  }
  • branches/3.19-stable/www/admin/services/index.jsp

    r8119 r8120  
    8888    redirect = "view_log.jsp?ID="+ID+"&extensionId="+HTML.urlEncode(extensionId);
    8989  }
     90  else if ("ClearLog".equals(cmd))
     91  {
     92    String extensionId = request.getParameter("extensionId");
     93    ServiceLog serviceLog = ServiceLog.getLog(extensionId, false);
     94    if (serviceLog != null)
     95    {
     96      serviceLog.clearLog();
     97      serviceLog.createLogger().log(LogLevel.INFO, "The log was cleared by "+sc.getLoggedInUserName()+" ("+sc.getLoggedInUserLogin()+")");
     98    }
     99    redirect = "view_log.jsp?ID="+ID+"&extensionId="+HTML.urlEncode(extensionId);
     100  }
    90101  else
    91102  {
  • branches/3.19-stable/www/admin/services/services.js

    r8119 r8120  
    3636      Buttons.addClickHandler('close', App.closeWindow);
    3737     
     38      Buttons.addClickHandler('btnClearLog', services.clearLog);
    3839      Events.addEventHandler('enableDebug', 'change', services.toggleDebugLog);
    3940     
     
    8687  }
    8788 
     89  services.clearLog = function()
     90  {
     91    var extensionId = Data.get('page-data', 'extension-id');
     92    var url = 'index.jsp?ID='+App.getSessionId();
     93    url += '&cmd=ClearLog';
     94    url += '&extensionId='+extensionId;
     95    location.replace(url);
     96  }
     97 
    8898  services.toggleDebugLog = function()
    8999  {
  • branches/3.19-stable/www/admin/services/view_log.jsp

    r8119 r8120  
    3838  %>
    3939  <base:page type="popup" title="View log" id="view-page">
    40   <base:head scripts="table.js,~services.js" styles="table.css">
     40  <base:head scripts="table.js,~services.js" styles="table.css,toolbar.css">
    4141    <style>
    4242    .level
     
    8585        title="Message"
    8686      />
    87       <div class="panelgroup bg-filled-50 bottomborder" style="height: 1.9em; padding: 0.25em; 1em;">
    88         <tbl:panel>
     87      <div class="panelgroup bg-filled-50 bottomborder" style="height: 1.9em;">
     88        <tbl:toolbar>
     89          <tbl:button
     90            id="btnClearLog"
     91            title="Clear the log"
     92            image="delete.png"
     93          />
     94          <tbl:label style="padding-right: 1em;">
    8995          <label><input type="checkbox" name="enableDebug"
    9096            id="enableDebug" <%=serviceLog.isDebugEnabled()?"checked":""%>
    9197            >Enable debug logging</label>
     98          </tbl:label>
     99          <tbl:label style="padding-right: 1em;">
    92100          <label><input type="checkbox" name="autoUpdate"
    93101            id="autoUpdate" <%=autoUpdate?"checked":"" %>
    94102            >Auto update</label>
    95         </tbl:panel>
     103          </tbl:label>
     104        </tbl:toolbar>
    96105      </div>
    97106      <tbl:data style="top: 1.9em; margin-top: 0px;">
Note: See TracChangeset for help on using the changeset viewer.