/** * Analytica - beta version - Systems Monitoring Tool * * Copyright (C) 2013, KleeGroup, direction.technique@kleegroup.com (http://www.kleegroup.com) * KleeGroup, Centre d'affaire la Boursidi�re - BP 159 - 92357 Le Plessis Robinson Cedex - France * * This program is free software; you can redistribute it and/or modify it under the terms * of the GNU General Public License as published by the Free Software Foundation; * either version 3 of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along with this program; * if not, see <http://www.gnu.org/licenses> * * Linking this library statically or dynamically with other modules is making a combined work based on this library. * Thus, the terms and conditions of the GNU General Public License cover the whole combination. * * As a special exception, the copyright holders of this library give you permission to link this library * with independent modules to produce an executable, regardless of the license terms of these independent modules, * and to copy and distribute the resulting executable under terms of your choice, provided that you also meet, * for each linked independent module, the terms and conditions of the license of that module. * An independent module is a module which is not derived from or based on this library. * If you modify this library, you may extend this exception to your version of the library, * but you are not obliged to do so. * If you do not wish to do so, delete this exception statement from your version. */ package io.analytica.mock; import io.analytica.KProcessJsonCodec; import io.analytica.api.KProcess; import java.lang.ref.WeakReference; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.apache.log4j.Logger; /** * ServerManager de test. * @author npiedeloup * @version $Id: RestNetApiPlugin.java,v 1.3 2012/10/16 12:39:27 npiedeloup Exp $ */ public final class MockServerManager { private static final Logger LOG = Logger.getLogger(MockServerManager.class); private final Map<String, List<KProcess>> processesMap = new HashMap<String, List<KProcess>>(); private static WeakReference<MockServerManager> INSTANCE = new WeakReference<MockServerManager>(null); /** * Constructeur simple pour instanciation par TU. */ public MockServerManager() { INSTANCE = new WeakReference<MockServerManager>(this); //WeakRef pour etre lib�r� automatiquement } /** * @return Instance */ public static MockServerManager getInstance() { final MockServerManager instance = INSTANCE.get(); if (instance == null) { throw new NullPointerException("MockServerManager wasn't initialized or keep by tests"); } return instance; } /** * @param json json du process recu */ public synchronized void push(final String json) { final List<KProcess> processes = KProcessJsonCodec.fromJson(json); LOG.info("PUSH " + processes.size() + " processes."); //LOG.info("-> " + json); for (final KProcess process : processes) { pushProcess(process); } } private void pushProcess(final KProcess process) { obtainProcesses(process.getType()).add(process); for (final KProcess subProcess : process.getSubProcesses()) { pushProcess(subProcess); } } private List<KProcess> obtainProcesses(final String type) { List<KProcess> processes = processesMap.get(type); if (processes == null) { processes = new ArrayList<KProcess>(); processesMap.put(type, processes); } return processes; } /** * @param type Type * @return Liste des processes de ce type */ public synchronized List<KProcess> readProcesses(final String type) { return obtainProcesses(type); } /** * @param metricName Nom de la metric * @param type Type du process * @param subTypes Sous type du process * @return Liste des measures */ public synchronized List<Double> getMeasures(final String metricName, final String type, final String... subTypes) { final List<KProcess> processByType = obtainProcesses(type); final List<Double> measures = new ArrayList<Double>(); for (final KProcess process : processByType) { if (toTree(process.getCategoryTerms()).startsWith(toTree(subTypes))) { final Double measure = process.getMeasures().get(metricName); if (measure != null) { measures.add(measure); } } } return measures; } private String toTree(final String[] subTypes) { final StringBuilder sb = new StringBuilder(); for (final String subType : subTypes) { sb.append("/"); sb.append(subType); } return sb.toString(); } }