001/*
002 * Copyright (c) 2006-2011 Nuxeo SA (http://nuxeo.com/) and others.
003 *
004 * All rights reserved. This program and the accompanying materials
005 * are made available under the terms of the Eclipse Public License v1.0
006 * which accompanies this distribution, and is available at
007 * http://www.eclipse.org/legal/epl-v10.html
008 *
009 * Contributors:
010 *     Florent Guillaume
011 */
012package org.nuxeo.ecm.core.storage.sql.management;
013
014import java.util.List;
015
016import org.nuxeo.ecm.core.blob.BlobManager;
017import org.nuxeo.ecm.core.blob.binary.BinaryManagerStatus;
018import org.nuxeo.ecm.core.storage.sql.RepositoryManagement;
019import org.nuxeo.ecm.core.storage.sql.coremodel.SQLRepositoryService;
020import org.nuxeo.runtime.api.Framework;
021
022/**
023 * An MBean to manage SQL storage repositories.
024 */
025public class SQLRepositoryStatus implements SQLRepositoryStatusMBean {
026
027    protected static List<RepositoryManagement> getRepositories() {
028        SQLRepositoryService sqlRepositoryService = Framework.getService(SQLRepositoryService.class);
029        return sqlRepositoryService.getRepositories();
030    }
031
032    @Override
033    public String listActiveSessions() {
034        StringBuilder buf = new StringBuilder();
035        buf.append("Actives sessions for SQL repositories:<br />");
036        for (RepositoryManagement repository : getRepositories()) {
037            buf.append("<b>").append(repository.getName()).append("</b>: ");
038            buf.append(repository.getActiveSessionsCount());
039            buf.append("<br />");
040        }
041        return buf.toString();
042    }
043
044    @Override
045    public int getActiveSessionsCount() {
046        int count = 0;
047        for (RepositoryManagement repository : getRepositories()) {
048            count += repository.getActiveSessionsCount();
049        }
050        return count;
051    }
052
053    @Override
054    public String clearCaches() {
055        StringBuilder buf = new StringBuilder();
056        buf.append("Cleared cached objects for SQL repositories:<br />");
057        for (RepositoryManagement repository : getRepositories()) {
058            buf.append("<b>").append(repository.getName()).append("</b>: ");
059            buf.append(repository.clearCaches());
060            buf.append("<br />");
061        }
062        return buf.toString();
063    }
064
065    @Override
066    public long getCachesSize() {
067        long size = 0;
068        for (RepositoryManagement repository : getRepositories()) {
069            size += repository.getCacheSize();
070        }
071        return size;
072    }
073
074    @Override
075    public String listRemoteSessions() {
076        StringBuilder buf = new StringBuilder();
077        buf.append("Actives remote session for SQL repositories:<br />");
078        for (RepositoryManagement repository : getRepositories()) {
079            buf.append("<b>").append(repository.getName()).append("</b>");
080            buf.append("<br/>");
081        }
082        return buf.toString();
083    }
084
085    @Override
086    public BinaryManagerStatus gcBinaries(boolean delete) {
087        return Framework.getService(BlobManager.class).garbageCollectBinaries(delete);
088    }
089
090    @Override
091    public boolean isBinariesGCInProgress() {
092        return Framework.getService(BlobManager.class).isBinariesGarbageCollectionInProgress();
093    }
094
095}