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 /**
76 * @param trigger
77 */
78 public void add(EventTrigger trigger)
79 {
80 _triggers.add(trigger);
81 }
82
83 /* ------------------------------------------------------------ */
84 /**
85 * @param triggers
86 */
87 public void addAll(List<EventTrigger> triggers)
88 {
89 _triggers.addAll(triggers);
90 }
91
92 /* ------------------------------------------------------------ */
93 /**
94 * @param triggers
95 */
96 public void addAll(EventTrigger... triggers)
97 {
98 _triggers.addAll(Arrays.asList(triggers));
99 }
100
101 /* ------------------------------------------------------------ */
102 /**
103 * Retrieve the event state associated with specified invocation
104 * of the event trigger match method. This event trigger retrieves
105 * the combined event state of all aggregated event triggers.
106 *
107 * @param timestamp time stamp associated with invocation
108 * @return event state or null if not found
109 *
110 * @see org.eclipse.jetty.monitor.jmx.EventTrigger#getState(long)
111 */
112 @Override
113 public EventState getState(long timestamp)
114 {
115 EventState state = new EventState();
116
117 for (EventTrigger trigger : _triggers)
118 {
119 EventState subState = trigger.getState(timestamp);
120 if (subState != null)
121 {
122 state.addAll(subState.values());
123 }
124 }
125
126 return state;
127 }
128
129 /* ------------------------------------------------------------ */
130 /**
131 * @see org.eclipse.jetty.monitor.jmx.EventTrigger#match(long)
132 */
133 @Override
134 public boolean match(long timestamp) throws Exception
135 {
136 boolean result = false;
137 for(EventTrigger trigger : _triggers)
138 {
139 result = trigger.match(timestamp) ? true : result;
140 }
141 return true;
142 }
143
144 /* ------------------------------------------------------------ */
145 /**
146 * Returns the string representation of this event trigger
147 * in the format "AND(triger1,trigger2,...)".
148 *
149 * @return string representation of the event trigger
150 *
151 * @see java.lang.Object#toString()
152 */
153 public String toString()
154 {
155 int cnt = 0;
156 StringBuilder result = new StringBuilder();
157
158 result.append("ANY(");
159 for (EventTrigger trigger : _triggers)
160 {
161 result.append(cnt++ > 0 ? "," : "");
162 result.append(trigger);
163 }
164 result.append(')');
165
166 return result.toString();
167 }
168 }