KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > jcorporate > expresso > ext > controller > HealthCheck


1 /* ====================================================================
2  * The Jcorporate Apache Style Software License, Version 1.2 05-07-2002
3  *
4  * Copyright (c) 1995-2002 Jcorporate Ltd. All rights reserved.
5  *
6  * Redistribution and use in source and binary forms, with or without
7  * modification, are permitted provided that the following conditions
8  * are met:
9  *
10  * 1. Redistributions of source code must retain the above copyright
11  * notice, this list of conditions and the following disclaimer.
12  *
13  * 2. Redistributions in binary form must reproduce the above copyright
14  * notice, this list of conditions and the following disclaimer in
15  * the documentation and/or other materials provided with the
16  * distribution.
17  *
18  * 3. The end-user documentation included with the redistribution,
19  * if any, must include the following acknowledgment:
20  * "This product includes software developed by Jcorporate Ltd.
21  * (http://www.jcorporate.com/)."
22  * Alternately, this acknowledgment may appear in the software itself,
23  * if and wherever such third-party acknowledgments normally appear.
24  *
25  * 4. "Jcorporate" and product names such as "Expresso" must
26  * not be used to endorse or promote products derived from this
27  * software without prior written permission. For written permission,
28  * please contact info@jcorporate.com.
29  *
30  * 5. Products derived from this software may not be called "Expresso",
31  * or other Jcorporate product names; nor may "Expresso" or other
32  * Jcorporate product names appear in their name, without prior
33  * written permission of Jcorporate Ltd.
34  *
35  * 6. No product derived from this software may compete in the same
36  * market space, i.e. framework, without prior written permission
37  * of Jcorporate Ltd. For written permission, please contact
38  * partners@jcorporate.com.
39  *
40  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
41  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
42  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
43  * DISCLAIMED. IN NO EVENT SHALL JCORPORATE LTD OR ITS CONTRIBUTORS
44  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
45  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
46  * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
47  * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
48  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
49  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
50  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
51  * SUCH DAMAGE.
52  * ====================================================================
53  *
54  * This software consists of voluntary contributions made by many
55  * individuals on behalf of the Jcorporate Ltd. Contributions back
56  * to the project(s) are encouraged when you make modifications.
57  * Please send them to support@jcorporate.com. For more information
58  * on Jcorporate Ltd. and its products, please see
59  * <http://www.jcorporate.com/>.
60  *
61  * Portions of this software are based upon other open source
62  * products and are subject to their respective licenses.
63  */

64
65 package com.jcorporate.expresso.ext.controller;
66
67 import com.jcorporate.expresso.core.controller.ControllerException;
68 import com.jcorporate.expresso.core.controller.ControllerRequest;
69 import com.jcorporate.expresso.core.controller.ControllerResponse;
70 import com.jcorporate.expresso.core.controller.DBController;
71 import com.jcorporate.expresso.core.controller.NonHandleableException;
72 import com.jcorporate.expresso.core.controller.Output;
73 import com.jcorporate.expresso.core.controller.State;
74 import com.jcorporate.expresso.core.misc.DateTime;
75 import com.jcorporate.expresso.core.misc.EventHandler;
76 import com.jcorporate.expresso.ext.dbobj.PerfTestResult;
77 import com.jcorporate.expresso.ext.dbobj.PerfTestSet;
78 import com.jcorporate.expresso.ext.dbobj.PerfTests;
79 import com.jcorporate.expresso.kernel.util.FastStringBuffer;
80 import com.jcorporate.expresso.services.dbobj.Event;
81
82 import java.util.Iterator JavaDoc;
83
84
85 /**
86  * HealthCheck is a stand-alone application that is intended to be called
87  * periodically by a scheduler to make sure that all components of the system
88  * are operational. It checks that access is still available to all
89  * appropriate resources & attempts to notify operations
90  * if there is a problem by several means.
91  *
92  * @author Michael Nash
93  */

94 public class HealthCheck
95         extends DBController {
96
97     public HealthCheck() {
98         State healthcheck = new State("healthcheck", "Run HealthCheck");
99         addState(healthcheck);
100         setInitialState("healthcheck");
101         this.setSchema(com.jcorporate.expresso.core.ExpressoSchema.class);
102     }
103
104     /**
105      * Transition to a new state
106      *
107      * @param newState The new state to transition into
108      */

109     public ControllerResponse newState(String JavaDoc newState,
110                                        ControllerRequest params)
111             throws ControllerException,
112             NonHandleableException {
113         ControllerResponse myResponse = super.newState(newState, params);
114
115         if (newState.equals("healthcheck")) {
116             healthCheckState(myResponse, params);
117         }
118
119         return myResponse;
120     } /* newState() */
121
122
123     /**
124      * @param args[]
125      */

126     private void healthCheckState(ControllerResponse myResponse,
127                                   ControllerRequest params)
128             throws ControllerException {
129         FastStringBuffer mailMessage = new FastStringBuffer(1024);
130
131         int testCount = 0;
132
133         try {
134             mailMessage.append("Health Check Starts at " +
135                     DateTime.getDateTimeString() + "\n");
136             myResponse.addOutput(new Output("Health Check Starts - db '" + params.getDataContext() +
137                     "'"));
138             FastStringBuffer message = new FastStringBuffer(256);
139             message.append("HealthCheck\n");
140             message.append("\nHealthCheck at ");
141             message.append(DateTime.getDateTimeForDB(params.getDataContext()));
142             message.append("\n");
143             message.append("For database/context '");
144             message.append(params.getDataContext());
145             message.append("'\n\n");
146
147             boolean noProblems = true;
148             PerfTestSet ps = new PerfTestSet();
149             ps.setDataContext(params.getDataContext());
150
151             PerfTestSet oneSet = null;
152             ps.setField("HealthCheck", "Y");
153
154             PerfTestResult totalResult = new PerfTestResult();
155             PerfTestResult oneResult = null;
156
157             for (Iterator JavaDoc pse = ps.searchAndRetrieveList().iterator();
158                  pse.hasNext();) {
159                 oneSet = (PerfTestSet) pse.next();
160                 oneResult = PerfTests.runSet(params.getDataContext(),
161                         oneSet.getField("SetNumber"),
162                         null);
163                 totalResult.add(oneResult);
164                 testCount++;
165             }
166
167             message.append(totalResult.getMessage());
168             message.append("\nThere were ");
169
170             if (totalResult.getFailureCount() > 0) {
171                 if (totalResult.getFailureCount() == 1) {
172                     message.append("was 1 failure, ");
173                 } else {
174                     message.append("were " + totalResult.getFailureCount() +
175                             " failures, ");
176                 }
177             } else {
178                 message.append("no failures, ");
179             }
180             if (totalResult.getWarningCount() > 0) {
181                 if (totalResult.getWarningCount() == 1) {
182                     message.append("1 warning, ");
183                 } else {
184                     message.append("" + totalResult.getWarningCount() +
185                             " warnings, ");
186                 }
187             } else {
188                 message.append("no warnings, ");
189             }
190
191             message.append("and ");
192
193             if (totalResult.getCautionCount() > 0) {
194                 if (totalResult.getCautionCount() == 1) {
195                     message.append("1 caution, ");
196                 } else {
197                     message.append("were " + totalResult.getCautionCount() +
198                             " cautions, ");
199                 }
200             } else {
201                 message.append("no cautions.");
202             }
203
204             message.append("\n");
205
206             if ((totalResult.getFailureCount() > 0) ||
207                     (totalResult.getWarningCount() > 0) ||
208                     (totalResult.getCautionCount() > 0)) {
209                 noProblems = false;
210             }
211
212             myResponse.addOutput(new Output("There were " + totalResult.getCurrentUsers() +
213                     " users logged in during tests"));
214
215             if (noProblems) {
216                 myResponse.addOutput(new Output("HealthCheck tests successful"));
217             } else {
218                 myResponse.addOutput(new Output("HealthCheck tests indicate problem"));
219             }
220
221             myResponse.addOutput(new Output(message.toString()));
222             new Event(params.getDataContext(), "HEALTH", message.toString(),
223                     noProblems);
224             EventHandler.flush();
225         } catch (Exception JavaDoc de) {
226             throw new ControllerException(de);
227         }
228
229         myResponse.addOutput(new Output("All Checks Complete. Ran " + testCount +
230                 " test sets."));
231     } /* main(String) */
232
233
234     /**
235      * @return java.lang.String The Title of the controller
236      */

237     public String JavaDoc getTitle() {
238         return "System Health Check";
239     }
240 } /* HealthCheck */
241
242 /* HealthCheck */
Popular Tags