Package org.olat.admin.sysinfo

Source Code of org.olat.admin.sysinfo.MRTGStatsDispatcher

/**
* OLAT - Online Learning and Training<br>
* http://www.olat.org
* <p>
* Licensed under the Apache License, Version 2.0 (the "License"); <br>
* you may not use this file except in compliance with the License.<br>
* You may obtain a copy of the License at
* <p>
* http://www.apache.org/licenses/LICENSE-2.0
* <p>
* Unless required by applicable law or agreed to in writing,<br>
* software distributed under the License is distributed on an "AS IS" BASIS, <br>
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br>
* See the License for the specific language governing permissions and <br>
* limitations under the License.
* <p>
* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br>
* University of Zurich, Switzerland.
* <p>
*/

package org.olat.admin.sysinfo;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Collections;
import java.util.Comparator;
import java.util.Date;
import java.util.HashSet;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Set;
import java.util.Map.Entry;
import java.util.logging.Level;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.olat.basesecurity.Constants;
import org.olat.basesecurity.Manager;
import org.olat.basesecurity.ManagerFactory;
import org.olat.basesecurity.SecurityGroup;
import org.olat.commons.coordinate.cluster.ClusterCoordinator;
import org.olat.commons.coordinate.cluster.jms.ClusterEventBus;
import org.olat.commons.coordinate.cluster.jms.SimpleProbe;
import org.olat.core.CoreSpringFactory;
import org.olat.core.commons.persistence.DBQueryImpl;
import org.olat.core.dispatcher.Dispatcher;
import org.olat.core.dispatcher.DispatcherAction;
import org.olat.core.gui.control.DefaultController;
import org.olat.core.gui.media.ServletUtil;
import org.olat.core.id.Identity;
import org.olat.core.logging.Tracing;
import org.olat.core.util.SessionInfo;
import org.olat.core.util.UserSession;
import org.olat.core.util.coordinate.Coordinator;
import org.olat.course.CourseModule;
import org.olat.instantMessaging.InstantMessagingModule;
import org.olat.repository.RepositoryEntry;
import org.olat.repository.RepositoryManager;
import org.olat.testutils.codepoints.client.CodepointClient;
import org.olat.testutils.codepoints.client.CommunicationException;
import org.olat.testutils.codepoints.client.Probe;
import org.olat.testutils.codepoints.client.StatId;
import org.olat.testutils.codepoints.server.Codepoint;

/**
* Description:<br>
* Wraps the request to get MRTGStatistics into a dispatcher.
*
* <P>
* Initial Date:  13.06.2006 <br>
* @author patrickb
*/
public class MRTGStatsDispatcher implements Dispatcher {
  // default allows monitoring only from localhost
  // "*" means allow from any host (not recommended in real world setups)
  private String monitoringHost = "127.0.0.1";
  private long lastErrorCount = 0;
  private String instanceId;
 
  private CodepointClient codepointClient_;
  private Probe dispatchProbe_;
  private Probe doInSyncEnterProbe_;
  private Probe doInSyncInsideProbe_;
  private Probe dbQueryListProbe_;
 
  private ClusterEventBus clusterEventBus_;
 
  public MRTGStatsDispatcher() {
    try{
      codepointClient_ = Codepoint.getLocalLoopCodepointClient();
      dispatchProbe_ = codepointClient_.startProbingBetween(
          "org.olat.core.dispatcher.DispatcherAction.execute-start",
          "org.olat.core.dispatcher.DispatcherAction.execute-end");
      doInSyncEnterProbe_ = codepointClient_.startProbingBetween(
          "org.olat.commons.coordinate.cluster.ClusterSyncer.doInSync-before-sync.org.olat.commons.coordinate.cluster.ClusterSyncer.doInSync",
          "org.olat.commons.coordinate.cluster.ClusterSyncer.doInSync-in-sync.org.olat.commons.coordinate.cluster.ClusterSyncer.doInSync");
      doInSyncInsideProbe_ = codepointClient_.startProbingBetween(
          "org.olat.commons.coordinate.cluster.ClusterSyncer.doInSync-in-sync.org.olat.commons.coordinate.cluster.ClusterSyncer.doInSync",
          "org.olat.commons.coordinate.cluster.ClusterSyncer.doInSync-after-sync.org.olat.commons.coordinate.cluster.ClusterSyncer.doInSync");
      dbQueryListProbe_ = codepointClient_.startProbingBetween(
          "org.olat.core.commons.persistence.DBQueryImpl.list-entry",
          "org.olat.core.commons.persistence.DBQueryImpl.list-exit");
      dispatchProbe_.logifSlowerThan(8000, Level.WARNING);
      doInSyncEnterProbe_.logifSlowerThan(200, Level.WARNING);
      doInSyncInsideProbe_.logifSlowerThan(1000, Level.WARNING);
      dbQueryListProbe_.logifSlowerThan(1300, Level.WARNING);
    } catch(RuntimeException re) {
      Tracing.logInfo("Certain MRTG Statistics will not be available since Codepoints are disabled", getClass());
    } catch (CommunicationException e) {
      Tracing.logInfo("Certain MRTG Statistics will not be available since Codepoints are disabled", getClass());
    }
  }
 
  private ClusterEventBus getClusterEventBus() {
    if (clusterEventBus_==null) {
      ClusterCoordinator clustercoord = (ClusterCoordinator) CoreSpringFactory.getCoreBean(Coordinator.class);
      if (clustercoord!=null) {
        clusterEventBus_ = clustercoord.getClusterEventBus();
      }
    }
    return clusterEventBus_;
  }
 
  /**
   * @see org.olat.core.dispatcher.Dispatcher#execute(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse, java.lang.String)
   */
  public void execute(HttpServletRequest request, HttpServletResponse response, String uriPrefix) {
    if(Tracing.isDebugEnabled(MRTGStatsDispatcher.class)){
      Tracing.logDebug("serving MRTGStats on uriPrefix [[["+uriPrefix+"]]]", MRTGStatsDispatcher.class);
    }
    returnMRTGStats(request, response);
  }

  private String roundedStatValueOf(Probe probe, StatId statId) {
    try{
      final int value = (int)Math.round(probe.getStatValue(statId)*100)/100;
      if (value>=0) {
        return String.valueOf(value);
      } else {
        return "0";
      }
    } catch (CommunicationException e) {
      e.printStackTrace(System.out);
      return "0";
    }
  }
   
  private String roundedValueOf(long value) {
    if (value>=0) {
      return String.valueOf(value);
    } else {
      return "0";
    }
  }
 
  /**
   * @param request
   * @param response
   */
  private void returnMRTGStats(HttpServletRequest request, HttpServletResponse response) {
    if (!request.getRemoteAddr().equals(monitoringHost) && !monitoringHost.equals("*")) {
      // limit to allowed hosts
      Tracing.logAudit("Trying to access stats from other host than configured (" + monitoringHost + ") : " + request.getRemoteAddr(), SysinfoController.class);
      DispatcherAction.sendForbidden(request.getPathInfo(), response);
    }
    String command = request.getParameter("cmd");
    if (command == null) command = "users";
    StringBuilder result = new StringBuilder();
    int httpsCount = 0;
    int activeSessionCnt = 0;
    if (command.equals("users")) { // get user stats of (authenticated) usersessions
      Set userSessions = UserSession.getAuthenticatedUserSessions();
      for (Iterator it_usess = userSessions.iterator(); it_usess.hasNext();) {
        UserSession usess = (UserSession) it_usess.next();
        activeSessionCnt++;
        SessionInfo sessInfo = usess.getSessionInfo();
        if (sessInfo.isSecure()) httpsCount++;
      }
      result.append(activeSessionCnt); // active authenticated sessions
      result.append("\n");
      result.append(httpsCount); // ,,, of which are secure
      result.append("\n0\n");
      result.append(instanceId);
    } else if (command.equals("webdav")) { // get webdav stats of (authenticated) usersessions
      Set userSessions = UserSession.getAuthenticatedUserSessions();
      int webdavcount = 0;
      int securewebdavcount = 0;
      for (Iterator it_usess = userSessions.iterator(); it_usess.hasNext();) {
        UserSession usess = (UserSession) it_usess.next();
        SessionInfo sessInfo = usess.getSessionInfo();
        if (sessInfo.isWebDAV()) {
          webdavcount++;
          if (sessInfo.isSecure()) securewebdavcount++;
        }
      }
      result.append(webdavcount); // webdav sessions
      result.append("\n");
      result.append(securewebdavcount); // ,,, of which are secure
      result.append("\n0\n");
      result.append(instanceId);
    } else if (command.equals("imstats")) { // get Jabber info
      if (InstantMessagingModule.isEnabled()) {
        result.append(InstantMessagingModule.getAdapter().countConnectedUsers());
        result.append("\n");
        //result.append(InstantMessagingModule.getAdapter().countUsersRunningFlashClient());
        result.append(0);
        result.append("\n0\n");
        result.append(instanceId);
      } else {
        result.append("0\n0\n0\n");
        result.append(instanceId);
      }
    } else if (command.equals("debug")) { // get debug stats
      // IMPORTANT: do not call too often, since .size() of a weakhashmap may be an expensive operation.
      // our mrtg default is: once every five minutes.
      int controllerCnt = DefaultController.getControllerCount();
      result.append(controllerCnt); // active and not yet disposed
      result.append("\n0\n0\n");
      result.append(instanceId);
     
    } else if (command.equals("mem")) { // get VM memory stats
      Runtime r = Runtime.getRuntime();
      long totalMem = r.totalMemory();
      // Total used memory in megabyptes
      result.append((totalMem - r.freeMemory())/1000000).append("\n");
      // Max available memory in VM in megabytes
      result.append(r.maxMemory()/1000000).append("\n");
      result.append("0\n");
      result.append(instanceId);

    } else if (command.equals("proc")) { // get VM process stats
      // Number of concurrent dispatching OLAT threads (concurrent user requests)
      result.append(DispatcherAction.getConcurrentCounter()).append("\n");
      // Number of active threads
      ThreadGroup group = Thread.currentThread().getThreadGroup();
      Thread[] threads = new Thread[ group.activeCount() ];
        group.enumerate( threads, false );
        int counter = 0;
        for ( Thread t : threads ) {
          if (t == null) continue;
          // http-8080-Processor and TP-Processor
          // not precise, but good enouth
            if ( t.getName().indexOf("-Processor") != -1) {
            counter++;
            }
      }
      result.append(counter).append("\n");
      result.append("0\n");
      result.append(instanceId);

    } else if (command.equals("err")) { // get error stats
        // Average number of errors per minute since last call
      long currentErrorCount = Tracing.getErrorCount();
      long errorDifference = currentErrorCount - lastErrorCount;

      lastErrorCount = currentErrorCount;
      result.append(errorDifference).append("\n");
      result.append("0\n0\n");
      result.append(instanceId);
     
    } else if (command.startsWith("dispatch")) {
     
      if (dispatchProbe_==null) {
        result.append("0\n0\n0\n");
      } else {
        if (command.equals("dispatchAvg")) {
          result.append(roundedStatValueOf(dispatchProbe_, StatId.TOTAL_AVERAGE_TIME_ELAPSED));
        } else if (command.equals("dispatchMax")) {
          result.append(roundedStatValueOf(dispatchProbe_, StatId.MAX_TIME_ELAPSED));
        } else if (command.equals("dispatchCnt")) {
          result.append(roundedStatValueOf(dispatchProbe_, StatId.TOTAL_MEASUREMENTS_COUNT));
        } else if (command.equals("dispatchReset")) {
          try {
            dispatchProbe_.clearStats();
          } catch (CommunicationException e) {
            e.printStackTrace(System.out);
            // ignore otherwise
          }
          result.append("0");
        }
        result.append("\n0\n0\n");
      }
      result.append(instanceId);
     
    } else if (command.startsWith("dbQueryList")) {
     
      if (dbQueryListProbe_==null) {
        result.append("0\n0\n0\n");
      } else {
        if (command.equals("dbQueryListAvg")) {
          result.append(roundedStatValueOf(dbQueryListProbe_, StatId.TOTAL_AVERAGE_TIME_ELAPSED));
        } else if (command.equals("dbQueryListMax")) {
          result.append(roundedStatValueOf(dbQueryListProbe_, StatId.MAX_TIME_ELAPSED));
        } else if (command.equals("dbQueryListCnt")) {
          result.append(roundedStatValueOf(dbQueryListProbe_, StatId.TOTAL_MEASUREMENTS_COUNT));
        } else if (command.equals("dbQueryListReset")) {
          try {
            dbQueryListProbe_.clearStats();
          } catch (CommunicationException e) {
            e.printStackTrace(System.out);
            // ignore otherwise
          }
          result.append("0");
        }
        result.append("\n0\n0\n");
      }
      result.append(instanceId);
     
    } else if (command.startsWith("doInSyncEnter")) {
     
      if (doInSyncEnterProbe_==null) {
        result.append("0\n0\n0\n");
      } else {
        if (command.equals("doInSyncEnterAvg")) {
          result.append(roundedStatValueOf(doInSyncEnterProbe_, StatId.TOTAL_AVERAGE_TIME_ELAPSED));
        } else if (command.equals("doInSyncEnterMax")) {
          result.append(roundedStatValueOf(doInSyncEnterProbe_, StatId.MAX_TIME_ELAPSED));
        } else if (command.equals("doInSyncEnterCnt")) {
          result.append(roundedStatValueOf(doInSyncEnterProbe_, StatId.TOTAL_MEASUREMENTS_COUNT));
        } else if (command.equals("doInSyncEnterReset")) {
          try {
            doInSyncEnterProbe_.clearStats();
          } catch (CommunicationException e) {
            e.printStackTrace(System.out);
            // ignore otherwise
          }
          result.append("0");
        }
        result.append("\n0\n0\n");
      }
      result.append(instanceId);

    } else if (command.startsWith("doInSyncInside")) {
     
      if (doInSyncInsideProbe_==null) {
        result.append("0\n0\n0\n");
      } else {
        if (command.equals("doInSyncInsideAvg")) {
          result.append(roundedStatValueOf(doInSyncInsideProbe_, StatId.TOTAL_AVERAGE_TIME_ELAPSED));
        } else if (command.equals("doInSyncInsideMax")) {
          result.append(roundedStatValueOf(doInSyncInsideProbe_, StatId.MAX_TIME_ELAPSED));
        } else if (command.equals("doInSyncInsideCnt")) {
          result.append(roundedStatValueOf(doInSyncInsideProbe_, StatId.TOTAL_MEASUREMENTS_COUNT));
        } else if (command.equals("doInSyncInsideReset")) {
          try {
            doInSyncInsideProbe_.clearStats();
          } catch (CommunicationException e) {
            e.printStackTrace(System.out);
            // ignore otherwise
          }
          result.append("0");
        }
        result.append("\n0\n0\n");
      }
      result.append(instanceId);
    } else if (command.startsWith("jmsDelivery")) {
     
      final ClusterEventBus clusterEventBus = getClusterEventBus();
      if (clusterEventBus==null) {
        result.append("0\n0\n0\n");
      } else {
        SimpleProbe probe = clusterEventBus.getMrtgProbeJMSDeliveryTime();
        if (command.equals("jmsDeliveryAvg")) {
          result.append(roundedValueOf(probe.getAvg()));
        } else if (command.equals("jmsDeliveryMax")) {
          result.append(roundedValueOf(probe.getMax()));
        } else if (command.equals("jmsDeliveryCnt")) {
          result.append(roundedValueOf(probe.getNum()));
        } else if (command.equals("jmsDeliveryReset")) {
          probe.reset();
          result.append("0");
        }
        result.append("\n0\n0\n");
      }
      result.append(instanceId);
    } else if (command.startsWith("jmsProcessing")) {
     
      final ClusterEventBus clusterEventBus = getClusterEventBus();
      if (clusterEventBus==null) {
        result.append("0\n0\n0\n");
      } else {
        SimpleProbe probe = clusterEventBus.getMrtgProbeJMSProcessingTime();
        if (command.equals("jmsProcessingAvg")) {
          result.append(roundedValueOf(probe.getAvg()));
        } else if (command.equals("jmsProcessingMax")) {
          result.append(roundedValueOf(probe.getMax()));
        } else if (command.equals("jmsProcessingCnt")) {
          result.append(roundedValueOf(probe.getNum()));
        } else if (command.equals("jmsProcessingReset")) {
          probe.reset();
          result.append("0");
        }
        result.append("\n0\n0\n");
      }
      result.append(instanceId);
    } else if (command.startsWith("jmsWaiting")) {
     
      final ClusterEventBus clusterEventBus = getClusterEventBus();
      if (clusterEventBus==null) {
        result.append("0\n0\n0\n");
      } else {
        SimpleProbe probe = clusterEventBus.getMrtgProbeJMSLoad();
        if (command.equals("jmsWaitingAvg")) {
          result.append(roundedValueOf(probe.getAvg()));
        } else if (command.equals("jmsWaitingMax")) {
          result.append(roundedValueOf(probe.getMax()));
        } else if (command.equals("jmsWaitingCnt")) {
          result.append(roundedValueOf(probe.getNum()));
        } else if (command.equals("jmsWaitingReset")) {
          probe.reset();
          result.append("0");
        }
        result.append("\n0\n0\n");
      }
      result.append(instanceId);
    } else if (command.startsWith("jmsQueued")) {
     
      final ClusterEventBus clusterEventBus = getClusterEventBus();
      if (clusterEventBus==null) {
        result.append("0\n0\n0\n");
      } else {
        SimpleProbe probe = clusterEventBus.getMrtgProbeJMSEnqueueTime();
        if (command.equals("jmsQueuedAvg")) {
          result.append(roundedValueOf(probe.getAvg()));
        } else if (command.equals("jmsQueuedMax")) {
          result.append(roundedValueOf(probe.getMax()));
        } else if (command.equals("jmsQueuedCnt")) {
          result.append(roundedValueOf(probe.getNum()));
        } else if (command.equals("jmsQueuedReset")) {
          probe.reset();
          result.append("0");
        }
        result.append("\n0\n0\n");
      }
      result.append(instanceId);
    } else if (command.equals("SecurityGroupMembershipImpl")) { // SecurityGroupMembershipImpl
      org.olat.core.commons.persistence.SimpleProbe probe = DBQueryImpl.listTableStatsMap_.get("org.olat.basesecurity.SecurityGroupMembershipImpl");
      if (probe==null) {
        result.append("0\n0\n0\n");
      } else {
        result.append(roundedValueOf(probe.getSum()));
        probe.reset();
        result.append("\n0\n0\n");
      }
      result.append(instanceId);
    } else if (command.equals("BGAreaImpl")) { // BGAreaImpl
      org.olat.core.commons.persistence.SimpleProbe probe = DBQueryImpl.listTableStatsMap_.get("org.olat.group.area.BGAreaImpl");
      if (probe==null) {
        result.append("0\n0\n0\n");
      } else {
        result.append(roundedValueOf(probe.getSum()));
        probe.reset();
        result.append("\n0\n0\n");
      }
      result.append(instanceId);
    } else if (command.equals("BusinessGroupImpl")) { // BusinessGroupImpl
      org.olat.core.commons.persistence.SimpleProbe probe = DBQueryImpl.listTableStatsMap_.get("org.olat.group.BusinessGroupImpl");
      if (probe==null) {
        result.append("0\n0\n0\n");
      } else {
        result.append(roundedValueOf(probe.getSum()));
        probe.reset();
        result.append("\n0\n0\n");
      }
      result.append(instanceId);
    } else if (command.equals("OLATResourceImpl")) { // OLATResourceImpl
      org.olat.core.commons.persistence.SimpleProbe probe = DBQueryImpl.listTableStatsMap_.get("org.olat.resource.OLATResourceImpl");
      if (probe==null) {
        result.append("0\n0\n0\n");
      } else {
        result.append(roundedValueOf(probe.getSum()));
        probe.reset();
        result.append("\n0\n0\n");
      }
      result.append(instanceId);
    } else if (command.equals("TheRest")) { // PolicyImpl
      org.olat.core.commons.persistence.SimpleProbe probe = DBQueryImpl.listTableStatsMap_.get("THEREST");
      if (probe==null) {
        result.append("0\n0\n0\n");
      } else {
        result.append(roundedValueOf(probe.getSum()));
        probe.reset();
        result.append("\n0\n0\n");
      }
      result.append(instanceId);
    } else if (command.equals("PolicyImpl")) { // PolicyImpl
      org.olat.core.commons.persistence.SimpleProbe probe = DBQueryImpl.listTableStatsMap_.get("THEREST");
      if (probe==null) {
        result.append("0\n0\n0\n");
      } else {
        result.append(roundedValueOf(probe.getSum()));
        probe.reset();
        result.append("\n0\n0\n");
      }
      result.append(instanceId);
     
      // dump details about all the non registered ones
      Set<Entry<String, org.olat.core.commons.persistence.SimpleProbe>> entries = DBQueryImpl.listTableStatsMap_.entrySet();
      Set<Entry<String, org.olat.core.commons.persistence.SimpleProbe>> nonRegisteredEntries = new HashSet<Entry<String,org.olat.core.commons.persistence.SimpleProbe>>();
      long sum = 0;
      for (Iterator<Entry<String, org.olat.core.commons.persistence.SimpleProbe>> it = entries.iterator(); it.hasNext();) {
        Entry<String, org.olat.core.commons.persistence.SimpleProbe> entry = it.next();
        if (!DBQueryImpl.registeredTables_.contains(entry.getKey())) {
          nonRegisteredEntries.add(entry);
          sum+=entry.getValue().getSum();
        }
      }
      List<Entry<String, org.olat.core.commons.persistence.SimpleProbe>> list = new LinkedList<Entry<String, org.olat.core.commons.persistence.SimpleProbe>>(nonRegisteredEntries);
      Collections.sort(
          list, new Comparator<Entry<String, org.olat.core.commons.persistence.SimpleProbe>>() {

        public int compare(
            Entry<String, org.olat.core.commons.persistence.SimpleProbe> o1,
            Entry<String, org.olat.core.commons.persistence.SimpleProbe> o2) {
          if (o1.getValue().getSum()>o2.getValue().getSum()) {
            return 1;
          } else if (o1.getValue().getSum()==o2.getValue().getSum()) {
            return 0;
          } else {
            return -1;
          }
        }
       
      });
      for (Iterator<Entry<String, org.olat.core.commons.persistence.SimpleProbe>> it = list.iterator(); it.hasNext();) {
        Entry<String, org.olat.core.commons.persistence.SimpleProbe> entry = it.next();
        Tracing.logInfo("MRTGStats: table '"+entry.getKey()+"' uses up "+entry.getValue().getSum()+"ms of a total of "+sum+"ms, which is "+Math.round(1000.0*entry.getValue().getSum()/sum)/10+"%", getClass());
        entry.getValue().reset();
      }
    } else if (command.equals("LifeCycleEntry")) { // LifeCycleEntry
      org.olat.core.commons.persistence.SimpleProbe probe = DBQueryImpl.listTableStatsMap_.get("org.olat.commons.lifecycle.LifeCycleEntry");
      if (probe==null) {
        result.append("0\n0\n0\n");
      } else {
        result.append(roundedValueOf(probe.getSum()));
        probe.reset();
        result.append("\n0\n0\n");
      }
      result.append(instanceId);
    } else if (command.equals("usercount")) { // get number of useraccounts counter
      Manager secMgr = ManagerFactory.getManager();
      SecurityGroup olatuserGroup = secMgr.findSecurityGroupByName(Constants.GROUP_OLATUSERS);
      int users = secMgr.countIdentitiesOfSecurityGroup(olatuserGroup);
      int disabled = secMgr.getIdentitiesByPowerSearch(null, null, true, null, null, null, null, null, Identity.STATUS_LOGIN_DENIED).size();     
      result.append(users-disabled).append("\n"); // number of active users
      result.append(disabled).append("\n"); // number of disabled users
      result.append("0\n");
      result.append(instanceId);
     
    } else if (command.equals("usercountmonthly")) { // get number of different users logged in during last month and last half year
      Manager secMgr = ManagerFactory.getManager();
      Calendar lastLoginLimit = Calendar.getInstance();
      lastLoginLimit.add(Calendar.MONTH, -1);
      result.append(secMgr.countUniqueUserLoginsSince(lastLoginLimit.getTime())).append("\n");
      lastLoginLimit.add(Calendar.MONTH, -5); // -1 -5 = -6 for half a year
      result.append(secMgr.countUniqueUserLoginsSince(lastLoginLimit.getTime())).append("\n");
      result.append("0\n");
      result.append(instanceId);
   
    } else if (command.equals("usercountdaily")) { // get number of different users logged in during last day and last week
      Manager secMgr = ManagerFactory.getManager();
      Calendar lastLoginLimit = Calendar.getInstance();
      lastLoginLimit.add(Calendar.DAY_OF_YEAR, -1);
      result.append(secMgr.countUniqueUserLoginsSince(lastLoginLimit.getTime())).append("\n");
      lastLoginLimit.add(Calendar.DAY_OF_YEAR, -6); // -1 - 6 = -7 for last week
      result.append(secMgr.countUniqueUserLoginsSince(lastLoginLimit.getTime())).append("\n");
      result.append("0\n");
      result.append(instanceId);     
       
    } else if (command.equals("usercountsince")) { // get number of different users logged in since a period which is specified by parameter date
      Manager secMgr = ManagerFactory.getManager();
      String dateParam = request.getParameter("date");
      if (dateParam==null) {
        result.append("date parameter missing. add date=yyyy-MM-dd\n");
      }
      else {
        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
        try {
          Date mydate = df.parse(dateParam);
          result.append(secMgr.countUniqueUserLoginsSince(mydate)).append("\n");
        } catch (ParseException e) {
          result.append("date parameter format error. expected: yyyy-MM-dd\n");
        }
       
        result.append("0\n0\n");
        result.append(instanceId);
      }
       
    }  else if (command.equals("coursecount")) { // get number of activated courses
      RepositoryManager repoMgr = RepositoryManager.getInstance();
      int allCourses = repoMgr.countByTypeLimitAccess(CourseModule.ORES_TYPE_COURSE, RepositoryEntry.ACC_OWNERS);
      int publishedCourses = repoMgr.countByTypeLimitAccess(CourseModule.ORES_TYPE_COURSE, RepositoryEntry.ACC_USERS);
      result.append(allCourses).append("\n"); // number of all courses
      result.append(publishedCourses).append("\n"); // number of published courses
      result.append("0\n");
      result.append(instanceId);
    }
   
    ServletUtil.serveStringResource(request, response, result.toString());
  }

  /**
   * Setter for Spring configuration
   * @param monitoringHost
   */
  public void setMonitoringHost(String monitoringHost) {
    this.monitoringHost = monitoringHost;
  }
 
  /**
   * Spring getter
   * @return
   */
  public String getMonitoringHost() {
    return monitoringHost;
  }

  public void setInstanceId(String instanceId) {
    this.instanceId = instanceId;
  }


 
 
}
TOP

Related Classes of org.olat.admin.sysinfo.MRTGStatsDispatcher

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.