001/*******************************************************************************
002 * Copyright (c) 2006-2013 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 *******************************************************************************/
009package org.nuxeo.ecm.core.management.works;
010
011import java.util.ArrayList;
012import java.util.List;
013
014import org.nuxeo.ecm.core.work.api.Work;
015import org.nuxeo.ecm.core.work.api.Work.State;
016import org.nuxeo.ecm.core.work.api.WorkManager;
017import org.nuxeo.runtime.api.Framework;
018
019public class WorksQueueMonitoring implements WorksQueueMonitoringMBean {
020
021    protected final String queueId;
022
023    public WorksQueueMonitoring(String id) {
024        queueId = id;
025    }
026
027    protected WorkManager manager() {
028        return Framework.getLocalService(WorkManager.class);
029    }
030
031    @Override
032    public int getScheduledCount() {
033        return manager().getQueueSize(queueId, State.SCHEDULED);
034    }
035
036    @Override
037    public int getRunningCount() {
038        return manager().getQueueSize(queueId, State.RUNNING);
039    }
040
041    @Override
042    public int getCompletedCount() {
043        return manager().getQueueSize(queueId, State.COMPLETED);
044    }
045
046    @Override
047    public String[] getScheduledWorks() {
048        return listWorks(State.SCHEDULED);
049    }
050
051    @Override
052    public String[] getRunningWorks() {
053        return listWorks(State.RUNNING);
054    }
055
056    protected String[] listWorks(State state) {
057        List<String> works = new ArrayList<String>();
058        for (Work work : manager().listWork(queueId, state)) {
059            works.add(work.toString());
060        }
061        return works.toArray(new String[works.size()]);
062    }
063}