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 }