/******************************************************************************* * ALMA - Atacama Large Millimeter Array * Copyright (c) ESO - European Southern Observatory, 2011 * (in the framework of the ALMA collaboration). * All rights reserved. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA *******************************************************************************/ package alma.acs.nsstatistics; import java.util.concurrent.atomic.AtomicLong; /** * TODO: Expand to get the parameter type as well, so that value can be interpreted */ public class ArchiveEventData extends AbstractEventData { protected static AtomicLong totalEventsProcessed = new AtomicLong(); protected static AtomicLong timeFirstEventProcessed = new AtomicLong(); private final String device; private final String parameter; private final Object value; public ArchiveEventData(Long time, String device, String parameter, Object value) { super(); timestamp = time; this.device = device; this.parameter = parameter; this.value = value; totalEventsProcessed.getAndIncrement(); timeFirstEventProcessed.compareAndSet(0L, System.currentTimeMillis()); } public static long getTotalEventsProcessed() { return totalEventsProcessed.get(); } /** * @return Time (in ms) of first event processed */ public static Long getTimeFirstEventProcessed() { return timeFirstEventProcessed.get(); } /** * @return Average number of events/s since the first one that was processed */ public static float getAverageRate() { return (getTotalEventsProcessed()*1000.f)/(System.currentTimeMillis()-getTimeFirstEventProcessed()); } public String getDevice() { return device; } public String getParameter() { return parameter; } public Object getValue() { return value; } public String toString() { return "Timestamp "+getTimestamp()+" Device "+getDevice()+" Property/parameter "+getParameter()+" Value "+getValue().toString(); } }