View Javadoc

1   //
2   //  ========================================================================
3   //  Copyright (c) 1995-2016 Mort Bay Consulting Pty. Ltd.
4   //  ------------------------------------------------------------------------
5   //  All rights reserved. This program and the accompanying materials
6   //  are made available under the terms of the Eclipse Public License v1.0
7   //  and Apache License v2.0 which accompanies this distribution.
8   //
9   //      The Eclipse Public License is available at
10  //      http://www.eclipse.org/legal/epl-v10.html
11  //
12  //      The Apache License v2.0 is available at
13  //      http://www.opensource.org/licenses/apache2.0.php
14  //
15  //  You may elect to redistribute this code under either of these licenses.
16  //  ========================================================================
17  //
18  
19  package org.eclipse.jetty.monitor.triggers;
20  
21  import java.util.ArrayList;
22  import java.util.Arrays;
23  import java.util.List;
24  
25  import org.eclipse.jetty.monitor.jmx.EventState;
26  import org.eclipse.jetty.monitor.jmx.EventTrigger;
27  
28  
29  /* ------------------------------------------------------------ */
30  /**
31   * AggregateEventTrigger
32   * 
33   * EventTrigger aggregation that executes every aggregated event
34   * triggers in left to right order, and returns match if any one
35   * of them have returned match.   
36   */
37  public class AggregateEventTrigger extends EventTrigger
38  {
39      protected final List<EventTrigger> _triggers;
40  
41      /* ------------------------------------------------------------ */
42      /**
43       * Construct an event trigger
44       */
45      public AggregateEventTrigger()
46      {
47          _triggers = new ArrayList<EventTrigger>();
48      }
49      
50      /* ------------------------------------------------------------ */
51      /**
52       * Construct an event trigger and associate the list 
53       * of event triggers to be aggregated by this trigger
54       * 
55       * @param triggers list of event triggers to add
56       */
57      public AggregateEventTrigger(List<EventTrigger> triggers)
58      {
59          _triggers = new ArrayList<EventTrigger>(triggers);
60      }
61  
62      /* ------------------------------------------------------------ */
63      /**
64       * Construct an event trigger and associate the array 
65       * of event triggers to be aggregated by this trigger
66       * 
67       * @param triggers list of event triggers to add
68       */
69      public AggregateEventTrigger(EventTrigger... triggers)
70      {
71          _triggers = Arrays.asList(triggers);
72      }
73      
74      /* ------------------------------------------------------------ */
75      public void add(EventTrigger trigger)
76      {
77          _triggers.add(trigger);
78      }
79      
80      /* ------------------------------------------------------------ */
81      public void addAll(List<EventTrigger> triggers)
82      {
83          _triggers.addAll(triggers);
84      }
85          
86      /* ------------------------------------------------------------ */
87      public void addAll(EventTrigger... triggers)
88      {
89          _triggers.addAll(Arrays.asList(triggers));
90      }
91      
92      /* ------------------------------------------------------------ */
93      /**
94       * Retrieve the event state associated with specified invocation
95       * of the event trigger match method. This event trigger retrieves
96       * the combined event state of all aggregated event triggers.
97       * 
98       * @param timestamp time stamp associated with invocation
99       * @return event state or null if not found
100      *
101      * @see org.eclipse.jetty.monitor.jmx.EventTrigger#getState(long)
102      */
103     @Override
104     public EventState getState(long timestamp)
105     {
106         EventState state = new EventState();
107         
108         for (EventTrigger trigger : _triggers)
109         {
110             EventState subState = trigger.getState(timestamp);
111             if (subState != null)
112             {
113                 state.addAll(subState.values());
114             }
115         }
116         
117         return state;
118     }
119 
120     /* ------------------------------------------------------------ */
121     /**
122      * @see org.eclipse.jetty.monitor.jmx.EventTrigger#match(long)
123      */
124     @Override
125     public boolean match(long timestamp) throws Exception
126     {
127         boolean result = false;
128         for(EventTrigger trigger : _triggers)
129         {
130             result = trigger.match(timestamp) ? true : result;
131         }
132         return true;
133     }
134 
135     /* ------------------------------------------------------------ */
136     /**
137      * Returns the string representation of this event trigger
138      * in the format "AND(triger1,trigger2,...)". 
139      * 
140      * @return string representation of the event trigger
141      * 
142      * @see java.lang.Object#toString()
143      */
144     public String toString()
145     {
146         int cnt = 0;
147         StringBuilder result = new StringBuilder();
148         
149         result.append("ANY(");
150         for (EventTrigger trigger : _triggers)
151         {
152             result.append(cnt++ > 0 ? "," : "");
153             result.append(trigger);
154         }
155         result.append(')');
156         
157         return result.toString();
158     }
159 }