From: <cs-...@li...> - 2012-06-15 08:36:42
|
details: http://cs-studio.hg.sourceforge.net/hgweb/cs-studio/cs-studio//hgroot/cs-studio/cs-studio/rev/7bfe68f4be79 changeset: 14735:7bfe68f4be79 user: Markus Moeller <mar...@de...> date: Wed Jun 13 08:15:24 2012 +0200 description: o.c.alarm.jms2ora: Changed wait time for the XMPP login in class ApplicationChecker details: http://cs-studio.hg.sourceforge.net/hgweb/cs-studio/cs-studio//hgroot/cs-studio/cs-studio/rev/3c2802dcafc9 changeset: 14736:3c2802dcafc9 user: Markus Moeller <mar...@de...> date: Wed Jun 13 08:30:21 2012 +0200 description: o.c.ams.application.monitor: Changed some alarm messages. details: http://cs-studio.hg.sourceforge.net/hgweb/cs-studio/cs-studio//hgroot/cs-studio/cs-studio/rev/bd636d540193 changeset: 14737:bd636d540193 user: Markus Moeller <mar...@de...> date: Thu Jun 14 10:56:02 2012 +0200 description: o.c.ams.application.monitor: Added new experimental SmsCheckProcessor class. diffstat: applications/plugins/org.csstudio.alarm.jms2ora/src/org/csstudio/alarm/jms2ora/ApplicationChecker.java | 4 +- applications/plugins/org.csstudio.alarm.jms2ora/src/org/csstudio/alarm/jms2ora/Jms2OraApplication.java | 2 +- applications/plugins/org.csstudio.ams.application.monitor/META-INF/MANIFEST.MF | 2 +- applications/plugins/org.csstudio.ams.application.monitor/src/org/csstudio/ams/application/monitor/check/NewSmsCheckProcessor.java | 197 ++++++++++ applications/plugins/org.csstudio.ams.application.monitor/src/org/csstudio/ams/application/monitor/check/SystemCheckWorker.java | 7 +- applications/plugins/org.csstudio.ams.application.monitor/src/org/csstudio/ams/application/monitor/service/MonitorMessageSender.java | 6 +- applications/plugins/org.csstudio.ams.application.monitor/src/org/csstudio/ams/application/monitor/status/AmsCheckAnalyser.java | 4 +- applications/plugins/org.csstudio.ams.application.monitor/src/org/csstudio/ams/application/monitor/status/ErrorReason.java | 10 +- applications/plugins/org.csstudio.ams.application.monitor/src/org/csstudio/ams/application/monitor/status/SmsCheckAnalyser.java | 21 +- 9 files changed, 225 insertions(+), 28 deletions(-) diffs (truncated from 408 to 300 lines): diff -r 922d7a1de21a -r bd636d540193 applications/plugins/org.csstudio.alarm.jms2ora/src/org/csstudio/alarm/jms2ora/ApplicationChecker.java --- a/applications/plugins/org.csstudio.alarm.jms2ora/src/org/csstudio/alarm/jms2ora/ApplicationChecker.java Tue Jun 12 12:53:11 2012 +0200 +++ b/applications/plugins/org.csstudio.alarm.jms2ora/src/org/csstudio/alarm/jms2ora/ApplicationChecker.java Thu Jun 14 10:56:02 2012 +0200 @@ -128,7 +128,7 @@ final Object lock = new Object(); synchronized (lock) { try { - lock.wait(3000); + lock.wait(10000L); } catch (final InterruptedException ie) { // Can be ignored } @@ -585,7 +585,7 @@ service.connect(xmppUser, xmppPassword, xmppServer); xmppSession = service; } catch (final Exception e) { - LOG.error("XMPP login is NOT possible: {}" + e.getMessage()); + LOG.error("XMPP login is NOT possible: {}", e.getMessage()); xmppSession = null; } } diff -r 922d7a1de21a -r bd636d540193 applications/plugins/org.csstudio.alarm.jms2ora/src/org/csstudio/alarm/jms2ora/Jms2OraApplication.java --- a/applications/plugins/org.csstudio.alarm.jms2ora/src/org/csstudio/alarm/jms2ora/Jms2OraApplication.java Tue Jun 12 12:53:11 2012 +0200 +++ b/applications/plugins/org.csstudio.alarm.jms2ora/src/org/csstudio/alarm/jms2ora/Jms2OraApplication.java Thu Jun 14 10:56:02 2012 +0200 @@ -99,7 +99,7 @@ String host = null; String user = null; - args = (String[])context.getArguments().get(IApplicationContext.APPLICATION_ARGS); + args = (String[]) context.getArguments().get(IApplicationContext.APPLICATION_ARGS); final IPreferencesService prefs = Platform.getPreferencesService(); final String xmppUser = prefs.getString(Jms2OraActivator.PLUGIN_ID, diff -r 922d7a1de21a -r bd636d540193 applications/plugins/org.csstudio.ams.application.monitor/META-INF/MANIFEST.MF --- a/applications/plugins/org.csstudio.ams.application.monitor/META-INF/MANIFEST.MF Tue Jun 12 12:53:11 2012 +0200 +++ b/applications/plugins/org.csstudio.ams.application.monitor/META-INF/MANIFEST.MF Thu Jun 14 10:56:02 2012 +0200 @@ -2,7 +2,7 @@ Bundle-ManifestVersion: 2 Bundle-Name: AMS Monitor Bundle-SymbolicName: org.csstudio.ams.application.monitor; singleton:=true -Bundle-Version: 1.0.0.qualifier +Bundle-Version: 1.0.1.qualifier Bundle-Vendor: Markus Moeller <mar...@de...> Require-Bundle: org.eclipse.core.runtime, org.eclipse.ecf.identity;bundle-version="3.1.100", diff -r 922d7a1de21a -r bd636d540193 applications/plugins/org.csstudio.ams.application.monitor/src/org/csstudio/ams/application/monitor/check/NewSmsCheckProcessor.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/applications/plugins/org.csstudio.ams.application.monitor/src/org/csstudio/ams/application/monitor/check/NewSmsCheckProcessor.java Thu Jun 14 10:56:02 2012 +0200 @@ -0,0 +1,197 @@ + +/* + * Copyright (c) 2012 Stiftung Deutsches Elektronen-Synchrotron, + * Member of the Helmholtz Association, (DESY), HAMBURG, GERMANY. + * + * THIS SOFTWARE IS PROVIDED UNDER THIS LICENSE ON AN "../AS IS" BASIS. + * WITHOUT WARRANTY OF ANY KIND, EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED + * TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR PARTICULAR PURPOSE AND + * NON-INFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE + * FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. SHOULD THE SOFTWARE PROVE DEFECTIVE + * IN ANY RESPECT, THE USER ASSUMES THE COST OF ANY NECESSARY SERVICING, REPAIR OR + * CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. + * NO USE OF ANY SOFTWARE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER. + * DESY HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, + * OR MODIFICATIONS. + * THE FULL LICENSE SPECIFYING FOR THE SOFTWARE THE REDISTRIBUTION, MODIFICATION, + * USAGE AND OTHER RIGHTS AND OBLIGATIONS IS INCLUDED WITH THE DISTRIBUTION OF THIS + * PROJECT IN THE FILE LICENSE.HTML. IF THE LICENSE IS NOT INCLUDED YOU MAY FIND A COPY + * AT HTTP://WWW.DESY.DE/LEGAL/LICENSE.HTM + * + * $Id: DesyKrykCodeTemplates.xml,v 1.7 2010/04/20 11:43:22 bknerr Exp $ + */ + +package org.csstudio.ams.application.monitor.check; + +import java.util.concurrent.ConcurrentLinkedQueue; +import javax.jms.JMSException; +import javax.jms.MapMessage; +import javax.jms.Message; +import javax.jms.MessageListener; +import org.csstudio.ams.application.monitor.AmsMonitorException; +import org.csstudio.ams.application.monitor.internal.AmsMonitorPreference; +import org.csstudio.ams.application.monitor.message.DeliveryWorkerAnswerMessage; +import org.csstudio.ams.application.monitor.message.InitiatorMessage; +import org.csstudio.ams.application.monitor.message.MessageCreator.MessageType; +import org.csstudio.ams.application.monitor.status.CheckStatus; +import org.csstudio.ams.application.monitor.status.CheckStatusInfo; +import org.csstudio.ams.application.monitor.status.ErrorReason; +import org.csstudio.ams.application.monitor.status.MonitorStatus; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * @author mmoeller + * @version 1.0 + * @since 13.06.2012 + */ +public class NewSmsCheckProcessor extends AbstractCheckProcessor implements MessageListener { + + private static final Logger LOG = LoggerFactory.getLogger(SmsCheckProcessor.class); + + //private Vector<DeliveryWorkerAnswerMessage> messageQueue; + + private ConcurrentLinkedQueue<DeliveryWorkerAnswerMessage> messageQueue; + + private long waitTime; + + public NewSmsCheckProcessor(String subscriberName, String ws) { + this(subscriberName, ws, 0L); + } + + public NewSmsCheckProcessor(String subscriberName, String ws, long interval) { + + super(LOG, ws, subscriberName, interval); + + messageQueue = new ConcurrentLinkedQueue<DeliveryWorkerAnswerMessage>(); + waitTime = AmsMonitorPreference.DELIVERY_WORKER_CHECK_WAIT_TIME.getValue(); + + // Assume that the wait time has to be converted to ms + waitTime *= 1000L; + LOG.info("Wait time: {}", waitTime); + + if (!readMonitorStatus()) { + monitorStatus = new MonitorStatus(AmsMonitorPreference.MAX_ALLOWED_WORKER_ERROR.getValue(), + AmsMonitorPreference.MAX_ALLOWED_WORKER_WARN.getValue()); + } else { + // If the last check was successful, reset the MonitorStatus + // The last check result will be preserved + CheckStatusInfo csi = monitorStatus.getCurrentCheckStatusInfo(); + if (csi != null) { + if (csi.getCheckStatus() == CheckStatus.OK) { + monitorStatus.reset(); + } + } + } + + monitorStatus.createCurrentCheckStatusInfo(); + LOG.info(monitorStatus.toString()); + } + + /** + * {@inheritDoc} + */ + @Override + public void run() { + + hasBeenStarted = true; + + // Create a new initiator message for this check cycle (always a new message!) + InitiatorMessage currentMessage = messageCreator.getInitiatorMessage(MessageType.SMS_DELIVERY_WORKER); + + // Remember the message if the answer will not return immediately + monitorStatus.addMessage(currentMessage); + + CheckStatusInfo currentStatus = monitorStatus.getCurrentCheckStatusInfo(); + + // Convert the message to a MapMessage object and send it + try { + + initJms(); + + // Start the asynchronous message receiving + consumer.addMessageListener(this); + + MapMessage mapMessage = messageConverter.convertToMapMessage(currentMessage, publisher.getSession()); + publisher.sendMessage(mapMessage); + LOG.info("Gesendet {}: ", mapMessage); + + } catch (JMSException jmse) { + LOG.error("[*** JMSException ***]: {}", jmse.getMessage()); + this.monitorStatus.addCheckStatusInfo(System.currentTimeMillis(), + CheckStatus.ERROR, ErrorReason.JMS); + closeJms(); + return; + } catch (AmsMonitorException asme) { + LOG.error("[*** AmsSystemMonitorException ***]: {}", asme.getMessage()); + this.monitorStatus.addCheckStatusInfo(System.currentTimeMillis(), + CheckStatus.ERROR, ErrorReason.JMS); + closeJms(); + return; + } + + long waitUntil = System.currentTimeMillis() + waitTime; + + // Wait some time + boolean found = false; + do { + while (!messageQueue.isEmpty()) { + DeliveryWorkerAnswerMessage o = messageQueue.poll(); + if (o.isAnswerForMessage(currentMessage)) { + LOG.info("Success: It is the answer for the current message."); + found = true; + } else if (monitorStatus.isAnswerForOlderMessage(o)) { + LOG.info("Success: The memory contains the initiator message."); + found = true; + } + if (found) { + monitorStatus.forgetAll(); + String value = o.getValue(); + currentStatus.setCheckStatus(CheckStatus.getCheckStatusByName(value)); + currentStatus.setErrorReason(ErrorReason.DELIVERY_DEVICE); + currentStatus.setErrorText(o.getTextValue()); + break; + } + } + if (!found) { + synchronized (this) { + try { + this.wait(1000L); + } catch (InterruptedException ie) { + LOG.warn("I have been interrupted."); + } + } + } + } while ((System.currentTimeMillis() <= waitUntil) && !found); + + // Stop the asynchronous message receiving + try { + consumer.removeMessageListener(); + } catch (JMSException e) { + LOG.warn("[*** JMSException ***]: Cannot remove message listener."); + } + + if (currentStatus.getCheckStatus() == CheckStatus.UNDEFINED) { + currentStatus.setCheckStatus(CheckStatus.ERROR); + currentStatus.setErrorReason(ErrorReason.SMS_DELIVERY_WORKER); + this.monitorStatus.addCheckStatusInfo(currentStatus); + } + + closeJms(); + } + + @Override + public synchronized void onMessage(Message message) { + MapMessage mm = (MapMessage) message; + DeliveryWorkerAnswerMessage dwam = messageConverter.convertToDeliveryWorkerAnswerMessage(mm); + if (LOG.isDebugEnabled()) { + LOG.debug("{}", dwam.toString()); + } + if (dwam.isValid()) { + messageQueue.add(dwam); + LOG.info("Received message has been stored in message queue."); + } + } +} diff -r 922d7a1de21a -r bd636d540193 applications/plugins/org.csstudio.ams.application.monitor/src/org/csstudio/ams/application/monitor/check/SystemCheckWorker.java --- a/applications/plugins/org.csstudio.ams.application.monitor/src/org/csstudio/ams/application/monitor/check/SystemCheckWorker.java Tue Jun 12 12:53:11 2012 +0200 +++ b/applications/plugins/org.csstudio.ams.application.monitor/src/org/csstudio/ams/application/monitor/check/SystemCheckWorker.java Thu Jun 14 10:56:02 2012 +0200 @@ -43,19 +43,20 @@ private static final Logger LOG = LoggerFactory.getLogger(SystemCheckWorker.class); - // TODO: Hier darf keine Konstante stehen!!!! Das beißt sich mit dem EIntrag in der Plugin customization. + // TODO: Hier darf keine Konstante stehen!!!! + // Das beißt sich mit dem Eintrag in der Plugin customization. private static final long MAX_THREAD_WAITTIME = 240000L; private ISessionService xmppService; private AmsCheckProcessor amsCheckProcessor; - private SmsCheckProcessor smsCheckProcessor; + private NewSmsCheckProcessor smsCheckProcessor; public SystemCheckWorker(ISessionService xmpp, String ws) { amsCheckProcessor = new AmsCheckProcessor("AmsSystemCheck", ws); long interval = AmsMonitorPreference.SMS_CHECK_INTERVAL.getValue(); - smsCheckProcessor = new SmsCheckProcessor("SmsDeliveryWorkerCheck", ws, interval); + smsCheckProcessor = new NewSmsCheckProcessor("SmsDeliveryWorkerCheck", ws, interval); xmppService = xmpp; } diff -r 922d7a1de21a -r bd636d540193 applications/plugins/org.csstudio.ams.application.monitor/src/org/csstudio/ams/application/monitor/service/MonitorMessageSender.java --- a/applications/plugins/org.csstudio.ams.application.monitor/src/org/csstudio/ams/application/monitor/service/MonitorMessageSender.java Tue Jun 12 12:53:11 2012 +0200 +++ b/applications/plugins/org.csstudio.ams.application.monitor/src/org/csstudio/ams/application/monitor/service/MonitorMessageSender.java Thu Jun 14 10:56:02 2012 +0200 @@ -52,7 +52,7 @@ success = true; LOG.debug("Try to send SMS: " + text); - String mailText = "TEST " + text + " [" + dateFormat.format(Calendar.getInstance().getTime()) + "]"; + String mailText = text + " [" + dateFormat.format(Calendar.getInstance().getTime()) + "]"; String server = AmsMonitorPreference.ALARM_MAIL_SERVER.getValue(); String from = AmsMonitorPreference.ALARM_MAIL_SENDER.getValue(); @@ -105,11 +105,11 @@ LOG.debug("Try to send mail: " + text); - String mailText = "TEST " + text + " [" + dateFormat.format(Calendar.getInstance().getTime()) + "]"; + String mailText = text + " [" + dateFormat.format(Calendar.getInstance().getTime()) + "]"; String server = AmsMonitorPreference.ALARM_MAIL_SERVER.getValue(); String from = AmsMonitorPreference.ALARM_MAIL_SENDER.getValue(); - String subject = "TEST " + AmsMonitorPreference.ALARM_MAIL_SUBJECT.getValue(); + String subject = AmsMonitorPreference.ALARM_MAIL_SUBJECT.getValue(); String amsGroup = AmsMonitorPreference.ALARM_AMS_GROUP.getValue(); String to = ""; diff -r 922d7a1de21a -r bd636d540193 applications/plugins/org.csstudio.ams.application.monitor/src/org/csstudio/ams/application/monitor/status/AmsCheckAnalyser.java |