1 //
2 // ========================================================================
3 // Copyright (c) 1995-2015 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
20 package org.eclipse.jetty.monitor.triggers;
21
22 import java.util.ArrayList;
23 import java.util.Arrays;
24 import java.util.List;
25
26 import org.eclipse.jetty.monitor.jmx.EventState;
27 import org.eclipse.jetty.monitor.jmx.EventTrigger;
28
29
30 /* ------------------------------------------------------------ */
31 /**
32 * AggregateEventTrigger
33 *
34 * EventTrigger aggregation that executes every aggregated event
35 * triggers in left to right order, and returns match if any one
36 * of them have returned match.
37 */
38 public class AggregateEventTrigger extends EventTrigger
39 {
40 protected final List<EventTrigger> _triggers;
41
42 /* ------------------------------------------------------------ */
43 /**
44 * Construct an event trigger
45 */
46 public AggregateEventTrigger()
47 {
48 _triggers = new ArrayList<EventTrigger>();
49 }
50
51 /* ------------------------------------------------------------ */
52 /**
53 * Construct an event trigger and associate the list
54 * of event triggers to be aggregated by this trigger
55 *
56 * @param triggers list of event triggers to add
57 */
58 public AggregateEventTrigger(List<EventTrigger> triggers)
59 {
60 _triggers = new ArrayList<EventTrigger>(triggers);
61 }
62
63 /* ------------------------------------------------------------ */
64 /**
65 * Construct an event trigger and associate the array
66 * of event triggers to be aggregated by this trigger
67 *
68 * @param triggers list of event triggers to add
69 */
70 public AggregateEventTrigger(EventTrigger... triggers)
71 {
72 _triggers = Arrays.asList(triggers);
73 }
74
75 /* ------------------------------------------------------------ */
76 /**
77 * @param trigger
78 */
79 public void add(EventTrigger trigger)
80 {
81 _triggers.add(trigger);
82 }
83
84 /* ------------------------------------------------------------ */
85 /**
86 * @param triggers
87 */
88 public void addAll(List<EventTrigger> triggers)
89 {
90 _triggers.addAll(triggers);
91 }
92
93 /* ------------------------------------------------------------ */
94 /**
95 * @param triggers
96 */
97 public void addAll(EventTrigger... triggers)
98 {
99 _triggers.addAll(Arrays.asList(triggers));
100 }
101
102 /* ------------------------------------------------------------ */
103 /**
104 * Retrieve the event state associated with specified invocation
105 * of the event trigger match method. This event trigger retrieves
106 * the combined event state of all aggregated event triggers.
107 *
108 * @param timestamp time stamp associated with invocation
109 * @return event state or null if not found
110 *
111 * @see org.eclipse.jetty.monitor.jmx.EventTrigger#getState(long)
112 */
113 @Override
114 public EventState getState(long timestamp)
115 {
116 EventState state = new EventState();
117
118 for (EventTrigger trigger : _triggers)
119 {
120 EventState subState = trigger.getState(timestamp);
121 if (subState != null)
122 {
123 state.addAll(subState.values());
124 }
125 }
126
127 return state;
128 }
129
130 /* ------------------------------------------------------------ */
131 /**
132 * @see org.eclipse.jetty.monitor.jmx.EventTrigger#match(long)
133 */
134 @Override
135 public boolean match(long timestamp) throws Exception
136 {
137 boolean result = false;
138 for(EventTrigger trigger : _triggers)
139 {
140 result = trigger.match(timestamp) ? true : result;
141 }
142 return true;
143 }
144
145 /* ------------------------------------------------------------ */
146 /**
147 * Returns the string representation of this event trigger
148 * in the format "AND(triger1,trigger2,...)".
149 *
150 * @return string representation of the event trigger
151 *
152 * @see java.lang.Object#toString()
153 */
154 public String toString()
155 {
156 int cnt = 0;
157 StringBuilder result = new StringBuilder();
158
159 result.append("ANY(");
160 for (EventTrigger trigger : _triggers)
161 {
162 result.append(cnt++ > 0 ? "," : "");
163 result.append(trigger);
164 }
165 result.append(')');
166
167 return result.toString();
168 }
169 }