All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.glassfish.gmbal.impl.TimerAnnotationHelper Maven / Gradle / Ivy

There is a newer version: 4.0.4
Show newest version
/*
 * Copyright (c) 2018 Oracle and/or its affiliates. All rights reserved.
 *
 * This program and the accompanying materials are made available under the
 * terms of the Eclipse Distribution License v. 1.0, which is available at
 * http://www.eclipse.org/org/documents/edl-v10.php.
 *
 * SPDX-License-Identifier: BSD-3-Clause
 */

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package org.glassfish.gmbal.impl;

import java.util.Map;
import java.util.Set;
import org.glassfish.gmbal.Description;
import org.glassfish.gmbal.IncludeSubclass;
import org.glassfish.gmbal.InheritedAttribute;
import org.glassfish.gmbal.ManagedAttribute;
import org.glassfish.gmbal.ManagedData;
import org.glassfish.gmbal.ManagedObject;
import org.glassfish.gmbal.ManagedObjectManager;
import org.glassfish.gmbal.ManagedOperation;
import org.glassfish.gmbal.NameValue;
import org.glassfish.pfl.tf.timer.impl.TimerFactoryImpl;
import org.glassfish.pfl.tf.timer.spi.Controllable;
import org.glassfish.pfl.tf.timer.spi.LogEventHandler;
import org.glassfish.pfl.tf.timer.spi.Named;
import org.glassfish.pfl.tf.timer.spi.Statistics;
import org.glassfish.pfl.tf.timer.spi.StatsEventHandler;
import org.glassfish.pfl.tf.timer.spi.Timer;
import org.glassfish.pfl.tf.timer.spi.TimerEventController;
import org.glassfish.pfl.tf.timer.spi.TimerEventControllerBase;
import org.glassfish.pfl.tf.timer.spi.TimerEventHandler;
import org.glassfish.pfl.tf.timer.spi.TimerFactory;
import org.glassfish.pfl.tf.timer.spi.TimerGroup;

/** This class provides nested classes that carry the needed Gmbal annotations
 * for the various Timer classes and interface, and a method for registering all
 * of these annotations in gmbal.
 *
 * @author ken_admin
 */
public class TimerAnnotationHelper {
    public interface ManagedNamed extends Named {
        @ManagedAttribute
        @Description( "TimerFactory that created this Timer or TimerGroup" )
        @Override
        TimerFactory factory() ;

        @ManagedAttribute
        @NameValue
        @Description( "Name of this Timer or TimerGroup" )
        @Override
        String name() ;
    }

    @ManagedObject
    @IncludeSubclass( { Timer.class, TimerGroup.class, TimerFactory.class } )
    public interface ManagedControllable extends Controllable, ManagedNamed {
        @ManagedAttribute
        @Description( "The purpose of the Timer or TimerGroup" )
        @Override
        String description() ;

        @ManagedAttribute
        @Description( "An internal identifier for the Timer or TimerGroup" )
        @Override
        int id() ;

        @ManagedAttribute
        @Description( "Set of Timers or TimerGroups contained in a TimerGroup" )
        @Override
        Set contents() ;

        @ManagedOperation
        @Description( "Enable this Timer, or all Timers and TimerGroups "
            + "contained in this TimerGroup" )
        @Override
        void enable() ;

        @ManagedOperation
        @Description( "Disable this Timer, or all Timers and TimerGroups "
            + "contained in this TimerGroup" )
        @Override
        void disable() ;

        @ManagedOperation
        @Description( "True if this Timer or TimerGroup is enabled" )
        @Override
        boolean isEnabled() ;
    }

    @ManagedData
    @Description( "Statistics recorded for a series of time intervals" )
    public class ManagedStatistics extends Statistics {
        public ManagedStatistics( long count, double min, double max,
            double average, double standardDeviation ) {
            super( count, min, max, average, standardDeviation ) ;
        }

        @ManagedAttribute
        @Description( "Total number of intervals recorded" )
        @Override
        public long count() { return super.count() ; }

        @ManagedAttribute
        @Description( "Minimum interval duration recorded" )
        @Override
        public double min() { return super.min() ; }

        @ManagedAttribute
        @Description( "Maximum interval duration recorded" )
        @Override
        public double max() { return super.max() ; }

        @ManagedAttribute
        @Description( "Average interval duration recorded" )
        @Override
        public double average() { return super.average() ; }

        @ManagedAttribute
        @Description( "Standard deviation of all durations recorded" )
        @Override
        public double standardDeviation() { return super.standardDeviation() ; }
    }

    public interface ManagedTimerEventHandler extends TimerEventHandler,
        ManagedNamed {
    }

    @ManagedObject
    @Description( "TimerEventHandler that records all TimerEvents in a log" )
    @InheritedAttribute( methodName="iterator",
        description="TimerEvents contained in this log in order of occurrence" )
    public interface ManagedLogEventHandler extends LogEventHandler,
        ManagedTimerEventHandler {
        @ManagedOperation
        @Description( "Discard all recorded timer events" )
        @Override
        void clear() ;
    }

    @ManagedObject
    @Description( "TimerEventHandler that accumulates statistics on events" )
    public interface ManagedStatsEventHandler extends StatsEventHandler,
        ManagedTimerEventHandler {
        @ManagedAttribute
        @Description( "A table giving statistics for each activated Timer "
            + "that had at least one TimerEvent" )
        @Override
        Map stats() ;

        @ManagedOperation
        @Description( "Discard all statistics on all Timers" )
        @Override
        void clear() ;
    }

    @ManagedObject
    @Description( "A simple TimerEventHandler that just displays TimerEvents "
        + "as they occur" )
    public class TracingEventHandler
	extends TimerFactoryImpl.TracingEventHandler
	implements ManagedTimerEventHandler {

	public TracingEventHandler( TimerFactory factory, String name ) {
	    super( factory, name ) ;
	}
    }


    @ManagedObject
    @Description( "A timer represents a particular action that has a "
        + "duration from ENTER to EXIT" )
    public interface ManagedTimer extends Timer, ManagedControllable {
        @ManagedAttribute
        @Description( "True if this Timer is enabled, and can generate "
            + "TimerEvents" )
        @Override
        boolean isActivated() ;
    }

    @ManagedObject
    @Description( "Controls entering and exiting Timers" )
    public class ManagedTimerEventController extends TimerEventController
        implements ManagedNamed {

        public ManagedTimerEventController( TimerFactory factory, String name ) {
            super( factory, name ) ;
        }

        @ManagedOperation
        @Description( "Enter a particular Timer" )
            @Override
        public void enter( Timer timer ) {
            super.enter( timer ) ;
        }

        @ManagedOperation
        @Description( "Exit a particular Timer" )
            @Override
        public void exit( Timer timer ) {
            super.exit( timer ) ;
        }
    }

    @ManagedObject
    @Description( "A group of Timers or other TimerGroups, "
        + "which may be enabled or disabled together" )
    public interface ManagedTimerGroup extends TimerGroup, ManagedControllable {
        @ManagedOperation
        @Description( "Add a new Timer or TimerGroup to this TimerGroup" )
        @Override
        boolean add( Controllable con ) ;

        @ManagedOperation
        @Description( "Remove a new Timer or TimerGroup from this TimerGroup" )
        @Override
        boolean remove( Controllable con ) ;
    }

    @ManagedObject
    @Description( "The Factory used to create and managed all objects "
        + "in the Timer framework" )
    public interface ManagedTimerFactory extends TimerFactory, ManagedTimerGroup {
        @ManagedAttribute
        @Description( "The total number of Controllabled IDs in use" )
        @Override
        int numberOfIds() ;

        @ManagedOperation
        @Description( "Look up a Timer or TimerGroup by its ID" )
        @Override
        Controllable getControllable( int id ) ;

        @ManagedOperation
        @Description( "Create a new LogEventHandler" )
        @Override
        LogEventHandler makeLogEventHandler( String name ) ;

        @ManagedOperation
        @Description( "Create a new TracingEventHandler" )
        @Override
        TimerEventHandler makeTracingEventHandler( String name ) ;

        @ManagedOperation
        @Description( "Create a new StatsEventHandler" )
        @Override
        StatsEventHandler makeStatsEventHandler( String name ) ;

        @ManagedOperation
        @Description( "Create a new Multi-Threaded StatsEventHandler" )
        @Override
        StatsEventHandler makeMultiThreadedStatsEventHandler( String name ) ;

        @ManagedOperation
        @Description( "Remove the TimerEventHandler from this factory" )
        @Override
        void removeTimerEventHandler( TimerEventHandler handler ) ;

        @ManagedOperation
        @Description( "Create a new Timer" )
        @Override
        Timer makeTimer( String name, String description )  ;

        @ManagedAttribute
        @Description( "All timers contained in this factory" )
        @Override
        Map timers() ;

        @ManagedOperation
        @Description( "Create a new TimerGroup" )
        @Override
        TimerGroup makeTimerGroup( String name, String description ) ;

        @ManagedAttribute
        @Description( "All timers contained in this factory" )
        @Override
        Map timerGroups() ;

        @ManagedOperation
        @Description( "Create a new TimerEventController" )
        @Override
        TimerEventController makeController( String name ) ;

        @ManagedOperation
        @Description( "Remote the TimerEventController from this factory" )
        @Override
        void removeController( TimerEventControllerBase controller ) ;

        @ManagedAttribute
        @Description( "All explicitly enabled Timers and TimerGroups" )
        @Override
        Set enabledSet() ;

        @ManagedAttribute
        @Description( "All activated Timers" )
        @Override
        Set activeSet() ;
    }

    public static void registerTimerClasses( ManagedObjectManager mom ) {
        for (Class cls : TimerAnnotationHelper.class.getDeclaredClasses()) {
            mom.addInheritedAnnotations(cls);
        }
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy