001/*
002 * (C) Copyright 2006-2011 Nuxeo SA (http://nuxeo.com/) and others.
003 *
004 * Licensed under the Apache License, Version 2.0 (the "License");
005 * you may not use this file except in compliance with the License.
006 * You may obtain a copy of the License at
007 *
008 *     http://www.apache.org/licenses/LICENSE-2.0
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS,
012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013 * See the License for the specific language governing permissions and
014 * limitations under the License.
015 *
016 * Contributors:
017 *     Florent Guillaume
018 */
019package org.nuxeo.ecm.core.storage.sql.management;
020
021import java.util.List;
022
023import org.nuxeo.ecm.core.blob.DocumentBlobManager;
024import org.nuxeo.ecm.core.blob.binary.BinaryManagerStatus;
025import org.nuxeo.ecm.core.repository.RepositoryService;
026import org.nuxeo.ecm.core.storage.sql.RepositoryManagement;
027import org.nuxeo.ecm.core.storage.sql.coremodel.SQLRepositoryService;
028import org.nuxeo.runtime.api.Framework;
029
030/**
031 * An MBean to manage SQL storage repositories.
032 */
033public class SQLRepositoryStatus implements SQLRepositoryStatusMBean {
034
035    protected static List<RepositoryManagement> getRepositories() {
036        SQLRepositoryService sqlRepositoryService = Framework.getService(SQLRepositoryService.class);
037        return sqlRepositoryService.getRepositories();
038    }
039
040    @Override
041    public String listActiveSessions() {
042        StringBuilder sb = new StringBuilder();
043        sb.append("Actives sessions for SQL repositories:<br />");
044        for (RepositoryManagement repository : getRepositories()) {
045            sb.append("<b>").append(repository.getName()).append("</b>: ");
046            sb.append(getActiveSessionsCount());
047            sb.append("<br />");
048        }
049        return sb.toString();
050    }
051
052    @Override
053    public int getActiveSessionsCount() {
054        RepositoryService repositoryService = Framework.getService(RepositoryService.class);
055        int count = 0;
056        for (RepositoryManagement repository : getRepositories()) {
057            count += repositoryService.getActiveSessionsCount(repository.getName());
058        }
059        return count;
060    }
061
062    @Override
063    public String clearCaches() {
064        StringBuilder sb = new StringBuilder();
065        sb.append("Cleared cached objects for SQL repositories:<br />");
066        for (RepositoryManagement repository : getRepositories()) {
067            sb.append("<b>").append(repository.getName()).append("</b>: ");
068            sb.append(repository.clearCaches());
069            sb.append("<br />");
070        }
071        return sb.toString();
072    }
073
074    @Override
075    public long getCachesSize() {
076        long size = 0;
077        for (RepositoryManagement repository : getRepositories()) {
078            size += repository.getCacheSize();
079        }
080        return size;
081    }
082
083    @Override
084    public String listRemoteSessions() {
085        StringBuilder sb = new StringBuilder();
086        sb.append("Actives remote session for SQL repositories:<br />");
087        for (RepositoryManagement repository : getRepositories()) {
088            sb.append("<b>").append(repository.getName()).append("</b>");
089            sb.append("<br/>");
090        }
091        return sb.toString();
092    }
093
094    @Override
095    public BinaryManagerStatus gcBinaries(boolean delete) {
096        return Framework.getService(DocumentBlobManager.class).garbageCollectBinaries(delete);
097    }
098
099    @Override
100    public boolean isBinariesGCInProgress() {
101        return Framework.getService(DocumentBlobManager.class).isBinariesGarbageCollectionInProgress();
102    }
103
104}