Skip to content
Snippets Groups Projects
Commit 34e83245 authored by Antonin Hottois's avatar Antonin Hottois Committed by Antonin Hottois
Browse files

1.0.5: Changes after rcm test

parent 6830802f
No related branches found
Tags trunk
No related merge requests found
......@@ -11,13 +11,6 @@
<attribute name="maven.pomderived" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="src" output="target/test-classes" path="src/test/java">
<attributes>
<attribute name="optional" value="true"/>
<attribute name="maven.pomderived" value="true"/>
<attribute name="test" value="true"/>
</attributes>
</classpathentry>
<classpathentry excluding="**" kind="src" output="target/test-classes" path="src/test/resources">
<attributes>
<attribute name="maven.pomderived" value="true"/>
......
#!/bin/sh
source /etc/bashrc
usage() {
echo "Usage: myJavaDeviceServer.sh instance_name [-vverbose_level]"
echo " instance_name: the server instance name (as registered in the TANGO database)"
echo " verbose_level: optional verbose level (e.g. -v1 for info, -v4 for debug)"
exit 1
}
if [[ "x$TANGO_HOST" = "x" ]]
then
echo TANGO_HOST is not defined. Aborting!
echo Please define a TANGO_HOST env. var. pointing to your TANGO database.
echo TANGO_HOST syntax is tango_database_host::tango_database_port [e.g. venus::20000].
exit 1
fi
if [[ "x$1" = "x" ]]
then
echo "Error: no instance name specified."
echo " "
usage
fi
# device main class
MAIN_CLASS=fr.soleil.tango.server.messagetrigger.MessageTrigger
# CLASSPATH
DEVICE_ROOT_JAVA=$(dirname $0)
CLASSPATH=
CLASSPATH=$CLASSPATH:$DEVICE_ROOT_JAVA/MessageTrigger-1.0.5.jar
CLASSPATH=$CLASSPATH:$DEVICE_ROOT_JAVA/org.tango-controls-JTangoServer-9.5.19.jar
CLASSPATH=$CLASSPATH:$DEVICE_ROOT_JAVA/org.tango-controls-TangORB-9.5.19.jar
CLASSPATH=$CLASSPATH:$DEVICE_ROOT_JAVA/org.tango-controls-JTangoClientLang-9.5.19.jar
CLASSPATH=$CLASSPATH:$DEVICE_ROOT_JAVA/ch.qos.logback-logback-classic-1.2.3.jar
CLASSPATH=$CLASSPATH:$DEVICE_ROOT_JAVA/org.slf4j-slf4j-ext-1.7.6.jar
CLASSPATH=$CLASSPATH:$DEVICE_ROOT_JAVA/net.sf.transmorph-transmorph-3.1.3.jar
CLASSPATH=$CLASSPATH:$DEVICE_ROOT_JAVA/net.sf.ehcache-ehcache-core-2.3.0.jar
CLASSPATH=$CLASSPATH:$DEVICE_ROOT_JAVA/org.quartz-scheduler-quartz-2.2.1.jar
CLASSPATH=$CLASSPATH:$DEVICE_ROOT_JAVA/org.apache.commons-commons-math3-3.5.jar
CLASSPATH=$CLASSPATH:$DEVICE_ROOT_JAVA/org.jacorb-jacorb-3.8.jar
CLASSPATH=$CLASSPATH:$DEVICE_ROOT_JAVA/org.jacorb-jacorb-services-3.8.jar
CLASSPATH=$CLASSPATH:$DEVICE_ROOT_JAVA/org.zeromq-jeromq-0.3.4.jar
CLASSPATH=$CLASSPATH:$DEVICE_ROOT_JAVA/org.tango-controls-JTangoCommons-9.5.19.jar
CLASSPATH=$CLASSPATH:$DEVICE_ROOT_JAVA/org.apache.commons-commons-lang3-3.7.jar
CLASSPATH=$CLASSPATH:$DEVICE_ROOT_JAVA/org.mozilla-rhino-1.7.7.1.jar
CLASSPATH=$CLASSPATH:$DEVICE_ROOT_JAVA/ch.qos.logback-logback-core-1.2.3.jar
CLASSPATH=$CLASSPATH:$DEVICE_ROOT_JAVA/c3p0-c3p0-0.9.1.1.jar
CLASSPATH=$CLASSPATH:$DEVICE_ROOT_JAVA/org.jacorb-jacorb-omgapi-3.8.jar
CLASSPATH=$CLASSPATH:$DEVICE_ROOT_JAVA/antlr-antlr-2.7.2.jar
CLASSPATH=$CLASSPATH:$DEVICE_ROOT_JAVA/mx4j-mx4j-3.0.1.jar
CLASSPATH=$CLASSPATH:$DEVICE_ROOT_JAVA/nanocontainer-nanocontainer-remoting-1.0-RC-1.jar
CLASSPATH=$CLASSPATH:$DEVICE_ROOT_JAVA/org.beanshell-bsh-2.0b5.jar
CLASSPATH=$CLASSPATH:$DEVICE_ROOT_JAVA/picocontainer-picocontainer-1.2.jar
CLASSPATH=$CLASSPATH:$DEVICE_ROOT_JAVA/tanukisoft-wrapper-3.1.0.jar
CLASSPATH=$CLASSPATH:$DEVICE_ROOT_JAVA/org.tango-controls-tango-idl-java-5.jar
CLASSPATH=$CLASSPATH:$DEVICE_ROOT_JAVA/com.google.guava-guava-20.0.jar
CLASSPATH=$CLASSPATH:$DEVICE_ROOT_JAVA/org.jacorb-jacorb-idl-compiler-3.8.jar
CLASSPATH=$CLASSPATH:$DEVICE_ROOT_JAVA/org.apache.ant-ant-1.8.2.jar
CLASSPATH=$CLASSPATH:$DEVICE_ROOT_JAVA/java_cup-java_cup-0.9e.jar
CLASSPATH=$CLASSPATH:$DEVICE_ROOT_JAVA/org.apache.ant-ant-launcher-1.8.2.jar
CLASSPATH=$CLASSPATH:$DEVICE_ROOT_JAVA/ch.qos.cal10n-cal10n-api-0.8.1.jar
CLASSPATH=$CLASSPATH:$DEVICE_ROOT_JAVA/org.slf4j-slf4j-api-1.7.25.jar
# VM OPTIONS (no memory options for beamlines)
CRASH_PATH=$TANGO_JAVA_CRASH_PATH/$MAIN_CLASS-$1-$(date +%y%m%d-%H%M%S)
LANG=en_EN.utf8
JAVA_OPTIONS="-Dorg.tango.server.checkalarms=false -Dlogback.configurationFile=$DEVICE_ROOT_JAVA/logback-linux.xml -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=$CRASH_PATH.hprof -XX:ErrorFile=$CRASH_PATH.log -Dcom.sun.management.jmxremote=true -Djava.awt.headless=true"
# launch device server
CLASSPATH=$CLASSPATH java $JAVA_OPTIONS -DTANGO_HOST=$TANGO_HOST $MAIN_CLASS $1 $2
@ECHO OFF
GOTO SCRIPT_BEGIN
:USAGE
ECHO Usage: myJavaDeviceServer.bat instance_name [-vverbose_level]
ECHO instance_name: the server instance name (as registered in the TANGO database)
ECHO verbose_level: optional verbose level (e.g. -v1 for info, -v4 for debug)
GOTO SCRIPT_END
:SCRIPT_BEGIN
IF NOT DEFINED TANGO_HOST (
ECHO TANGO_HOST is not defined. Aborting!
ECHO Please define a TANGO_HOST env. var. pointing to your TANGO database.
ECHO TANGO_HOST syntax is tango_database_host::tango_database_port [e.g. venus::20000].
GOTO SCRIPT_END
)
IF {%1} == {} (
ECHO Error: no instance name specified.
ECHO .
GOTO USAGE
)
:: classe principale du device server
# classe principale du device server
set MAIN_CLASS=fr.soleil.tango.server.messagetrigger.MessageTrigger
:: CLASSPATH
:: le repertoire contenant les device servers java et leurs dependances
:: generalement \\DeviceServers\java\
set DEVICE_ROOT_JAVA=%~dp0%
set CLASSPATH=%CLASSPATH%;%DEVICE_ROOT_JAVA%/MessageTrigger-1.0.5.jar
set CLASSPATH=%CLASSPATH%;%DEVICE_ROOT_JAVA%/org.tango-controls-JTangoServer-9.5.19.jar
set CLASSPATH=%CLASSPATH%;%DEVICE_ROOT_JAVA%/org.tango-controls-TangORB-9.5.19.jar
set CLASSPATH=%CLASSPATH%;%DEVICE_ROOT_JAVA%/org.tango-controls-JTangoClientLang-9.5.19.jar
set CLASSPATH=%CLASSPATH%;%DEVICE_ROOT_JAVA%/ch.qos.logback-logback-classic-1.2.3.jar
set CLASSPATH=%CLASSPATH%;%DEVICE_ROOT_JAVA%/org.slf4j-slf4j-ext-1.7.6.jar
set CLASSPATH=%CLASSPATH%;%DEVICE_ROOT_JAVA%/net.sf.transmorph-transmorph-3.1.3.jar
set CLASSPATH=%CLASSPATH%;%DEVICE_ROOT_JAVA%/net.sf.ehcache-ehcache-core-2.3.0.jar
set CLASSPATH=%CLASSPATH%;%DEVICE_ROOT_JAVA%/org.quartz-scheduler-quartz-2.2.1.jar
set CLASSPATH=%CLASSPATH%;%DEVICE_ROOT_JAVA%/org.apache.commons-commons-math3-3.5.jar
set CLASSPATH=%CLASSPATH%;%DEVICE_ROOT_JAVA%/org.jacorb-jacorb-3.8.jar
set CLASSPATH=%CLASSPATH%;%DEVICE_ROOT_JAVA%/org.jacorb-jacorb-services-3.8.jar
set CLASSPATH=%CLASSPATH%;%DEVICE_ROOT_JAVA%/org.zeromq-jeromq-0.3.4.jar
set CLASSPATH=%CLASSPATH%;%DEVICE_ROOT_JAVA%/org.tango-controls-JTangoCommons-9.5.19.jar
set CLASSPATH=%CLASSPATH%;%DEVICE_ROOT_JAVA%/org.apache.commons-commons-lang3-3.7.jar
set CLASSPATH=%CLASSPATH%;%DEVICE_ROOT_JAVA%/org.mozilla-rhino-1.7.7.1.jar
set CLASSPATH=%CLASSPATH%;%DEVICE_ROOT_JAVA%/ch.qos.logback-logback-core-1.2.3.jar
set CLASSPATH=%CLASSPATH%;%DEVICE_ROOT_JAVA%/c3p0-c3p0-0.9.1.1.jar
set CLASSPATH=%CLASSPATH%;%DEVICE_ROOT_JAVA%/org.jacorb-jacorb-omgapi-3.8.jar
set CLASSPATH=%CLASSPATH%;%DEVICE_ROOT_JAVA%/antlr-antlr-2.7.2.jar
set CLASSPATH=%CLASSPATH%;%DEVICE_ROOT_JAVA%/mx4j-mx4j-3.0.1.jar
set CLASSPATH=%CLASSPATH%;%DEVICE_ROOT_JAVA%/nanocontainer-nanocontainer-remoting-1.0-RC-1.jar
set CLASSPATH=%CLASSPATH%;%DEVICE_ROOT_JAVA%/org.beanshell-bsh-2.0b5.jar
set CLASSPATH=%CLASSPATH%;%DEVICE_ROOT_JAVA%/picocontainer-picocontainer-1.2.jar
set CLASSPATH=%CLASSPATH%;%DEVICE_ROOT_JAVA%/tanukisoft-wrapper-3.1.0.jar
set CLASSPATH=%CLASSPATH%;%DEVICE_ROOT_JAVA%/org.tango-controls-tango-idl-java-5.jar
set CLASSPATH=%CLASSPATH%;%DEVICE_ROOT_JAVA%/com.google.guava-guava-20.0.jar
set CLASSPATH=%CLASSPATH%;%DEVICE_ROOT_JAVA%/org.jacorb-jacorb-idl-compiler-3.8.jar
set CLASSPATH=%CLASSPATH%;%DEVICE_ROOT_JAVA%/org.apache.ant-ant-1.8.2.jar
set CLASSPATH=%CLASSPATH%;%DEVICE_ROOT_JAVA%/java_cup-java_cup-0.9e.jar
set CLASSPATH=%CLASSPATH%;%DEVICE_ROOT_JAVA%/org.apache.ant-ant-launcher-1.8.2.jar
set CLASSPATH=%CLASSPATH%;%DEVICE_ROOT_JAVA%/ch.qos.cal10n-cal10n-api-0.8.1.jar
set CLASSPATH=%CLASSPATH%;%DEVICE_ROOT_JAVA%/org.slf4j-slf4j-api-1.7.25.jar
:: crash path
for /f "tokens=2-4 delims=/ " %%a in ('date /T') do set year=%%c
for /f "tokens=2-4 delims=/ " %%a in ('date /T') do set month=%%a
for /f "tokens=2-4 delims=/ " %%a in ('date /T') do set day=%%b
set TODAY=%year%-%month%-%day%
for /f "tokens=1 delims=: " %%h in ('time /T') do set hour=%%h
for /f "tokens=2 delims=: " %%m in ('time /T') do set minutes=%%m
for /f "tokens=3 delims=: " %%a in ('time /T') do set ampm=%%a
set NOW=%hour%-%minutes%-%ampm%
SET CRASH_PATH=%TANGO_JAVA_CRASH_PATH%\%MAIN_CLASS%-%1-%TODAY%-%NOW%
:: OPTIONS de VM
set JAVA_OPTIONS=-Dcom.sun.management.jmxremote=true -Djava.awt.headless=true
:: lancement du device server
javaw %JAVA_OPTIONS% -cp %CLASSPATH% -DTANGO_HOST=%TANGO_HOST% -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=%CRASH_PATH%.hprof -XX:ErrorFile=%CRASH_PATH%.log %MAIN_CLASS% %1 %2
:SCRIPT_END
\ No newline at end of file
# Welcome to Tango-Controls server MessageTrigger
Clone this repo and build single executable jar using maven:
Clone this repo and build single executable jar with dependencies using maven:
```bash
$> mvn package
$> mvn package -f pom_fat_jar.xml
```
Run the server:
......@@ -13,3 +13,23 @@ Run the server:
$> java -jar target/MessageTrigger-1.0.3.jar
```
Or build the jar without dependencies for integration in the control system:
```bash
$> mvn package
```
You may then use the following files for integration:
Linux:
```bash
$> ./MessageTrigger
```
Windows:
```bash
$> MessageTrigger.bat
```
\ No newline at end of file
......@@ -4,36 +4,16 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>fr.soleil.device</groupId>
<groupId>fr.soleil.deviceservers</groupId>
<artifactId>MessageTrigger</artifactId>
<version>1.0.3</version>
<version>1.0.5</version>
<name>MessageTrigger</name>
<description>Message Trigger Device Server</description>
<packaging>jar</packaging>
<!--
<properties>
<tango.site></tango.site>
<tango.platform></tango.platform>
<tango.family></tango.family>
<tango.bus></tango.bus>
</properties>
-->
<!-- TODO define distributionManagement for your server
<distributionManagement>
</distributionManagement>
-->
<licenses>
<license>
<name>?</name>
</license>
</licenses>
<organization>
<name>Synchrotron SOLEIL</name>
<url>synchrotron-soleil.fr</url>
</organization>
<developers>
<developer>
<name>Antonin Hottois</name>
......@@ -41,7 +21,7 @@
<organization>Synchrotron SOLEIL</organization>
<organizationUrl>synchrotron-soleil.fr</organizationUrl>
<roles>
<role>developer</role>
<role>Developer</role>
</roles>
</developer>
</developers>
......@@ -67,6 +47,7 @@
</dependencies>
<build>
<finalName>fr.soleil.deviceservers-MessageTrigger-${version}</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
......@@ -78,33 +59,6 @@
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<plugin>
<!-- maven-assembly-plugin creates single executable jar during maven package phase -->
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>3.0.0</version>
<executions>
<execution>
<id>assembly</id>
<goals>
<goal>single</goal>
</goals>
<phase>package</phase>
<configuration>
<appendAssemblyId>false</appendAssemblyId>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<archive>
<manifest>
<mainClass>fr.soleil.device.messagetrigger.MessageTrigger</mainClass>
</manifest>
</archive>
</configuration>
</execution>
</executions>
</plugin>
<!-- TODO setup release plugin, see how to -->
</plugins>
</build>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>fr.soleil.deviceservers</groupId>
<artifactId>MessageTrigger</artifactId>
<version>1.0.5</version>
<name>MessageTrigger</name>
<description>Message Trigger Device Server</description>
<packaging>jar</packaging>
<organization>
<name>Synchrotron SOLEIL</name>
<url>synchrotron-soleil.fr</url>
</organization>
<developers>
<developer>
<name>Antonin Hottois</name>
<email>hottois@synchrotron-soleil.fr</email>
<organization>Synchrotron SOLEIL</organization>
<organizationUrl>synchrotron-soleil.fr</organizationUrl>
<roles>
<role>Developer</role>
</roles>
</developer>
</developers>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.tango-controls</groupId>
<artifactId>JTango</artifactId>
<version>9.5.18</version>
<type>pom</type>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.3</version>
</dependency>
</dependencies>
<build>
<finalName>fr.soleil.deviceservers-MessageTrigger-${version}-jar-with-dependencies</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.5</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>3.0.0</version>
<executions>
<execution>
<id>assembly</id>
<goals>
<goal>single</goal>
</goals>
<phase>package</phase>
<configuration>
<appendAssemblyId>false</appendAssemblyId>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<archive>
<manifest>
<mainClass>fr.soleil.tango.server.messagetrigger.MessageTrigger</mainClass>
</manifest>
</archive>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
\ No newline at end of file
package fr.soleil.device.messagetrigger;
package fr.soleil.tango.server.messagetrigger;
import org.tango.utils.DevFailedUtils;
......
package fr.soleil.device.messagetrigger;
package fr.soleil.tango.server.messagetrigger;
import java.util.Arrays;
import java.util.Date;
......
package fr.soleil.device.messagetrigger;
package fr.soleil.tango.server.messagetrigger;
import java.util.HashMap;
......@@ -39,6 +39,7 @@ public class MessageTrigger implements StateUpdates{
private TangoDevice m_text_talker;
private Vector<AttributeParser> m_monitored_attributes_list;
private HashMap<String,TangoDevice> m_monitored_devices;
private String m_monitored_attributes_string;
//-----------------------------------------------------------------------------------------
// ATTRIBUTES
......@@ -65,10 +66,10 @@ public class MessageTrigger implements StateUpdates{
// TextTalker
@DeviceProperty (description = "Name/Path of the Text Talker Proxy in the database.\nFor example: test/test/talker", isMandatory = true)
private String TextTalkerPath;
private String TextTalkerProxyName;
public void setTextTalkerPath(String TextTalkerPath) {
this.TextTalkerPath = TextTalkerPath;
public void setTextTalkerProxyName(String TextTalkerProxyName) {
this.TextTalkerProxyName = TextTalkerProxyName;
}
// PollingPeriod
......@@ -144,18 +145,18 @@ public class MessageTrigger implements StateUpdates{
// Checking polling period
if(!(PollingPeriod>=100))
{
send_error(DevFailedUtils.newDevFailed("PollingPeriod is not valid"), "ERROR: Invalid PollingPeriod property! It should be at least 100ms");
send_fault(DevFailedUtils.newDevFailed("PollingPeriod is not valid"), "Invalid PollingPeriod property! It should be at least 100ms");
return;
}
// Initializing TextTalker device
try
{
m_text_talker = new TangoDevice(TextTalkerPath);
m_text_talker = new TangoDevice(TextTalkerProxyName);
}
catch (DevFailed e)
{
send_error(e, "FATAL: Cannot reach Text Talker Proxy. Check the property TextTalkerProxyName");
send_fault(e, "Cannot reach Text Talker Proxy. Check the property TextTalkerProxyName");
return;
}
......@@ -179,7 +180,7 @@ public class MessageTrigger implements StateUpdates{
}
catch (DevFailed e)
{
send_error(e, "FATAL: Error when initializing monitored attributes\n" +
send_fault(e, "Error when initializing monitored attributes\n" +
"Check line "+ (i+1) +" of property MessageList");
return;
}
......@@ -196,7 +197,7 @@ public class MessageTrigger implements StateUpdates{
}
catch (DevFailed e)
{
send_error(e, "FATAL: Cannot reach device " + device_name);
send_fault(e, "Cannot reach device " + device_name);
return;
}
}
......@@ -206,6 +207,9 @@ public class MessageTrigger implements StateUpdates{
// Device should be OFF until it's started.
setState(DeviceState.OFF);
setStatus("Ready! Standing by...");
// Starting by default
Start();
}
......@@ -235,30 +239,32 @@ public class MessageTrigger implements StateUpdates{
// COMMANDS
//-----------------------------------------------------------------------------------------
@Command(inTypeDesc = "Stops the monitoring service")
@StateMachine(deniedStates = { DeviceState.FAULT, DeviceState.ALARM, DeviceState.OFF, DeviceState.INIT}, endState = DeviceState.OFF)
@Command(inTypeDesc = "Stops the monitoring service", displayLevel = 1)
@StateMachine(deniedStates = { DeviceState.FAULT, DeviceState.OFF, DeviceState.INIT})
public void Stop()
{
// Stops the monitoring task
if(m_trigger_task!=null) m_trigger_task.stop();
setStatus("Trigger service stopped!\nDevice standing by...");
setState(DeviceState.OFF);
}
@Command(inTypeDesc = "Starts the monitoring service")
@StateMachine(deniedStates = { DeviceState.FAULT, DeviceState.ALARM, DeviceState.ON, DeviceState.INIT}, endState = DeviceState.ON)
@Command(inTypeDesc = "Starts the monitoring service", displayLevel = 1)
@StateMachine(deniedStates = { DeviceState.FAULT, DeviceState.ALARM, DeviceState.ON, DeviceState.INIT})
public void Start()
{
// Get the list of monitored attributes to display their names in status
String str = "Monitored attributes:\n";
m_monitored_attributes_string = "Monitored attributes:\n";
for(int i=0; i<m_monitored_attributes_list.size(); i++)
{
str+=m_monitored_attributes_list.get(i).get_name();
str+="\n";
m_monitored_attributes_string+=m_monitored_attributes_list.get(i).get_name();
m_monitored_attributes_string+="\n";
}
// Starts the monitoring task
m_trigger_task = new TriggerPulserTask( PollingPeriod, m_monitored_attributes_list, m_monitored_devices, m_text_talker, m_message_array, this );
setStatus("Trigger service started!\n\n"+str);
setStatus("Trigger service started!\n\n"+m_monitored_attributes_string);
setState(DeviceState.ON);
}
@Command(inTypeDesc = "Clear the list of messages")
......@@ -273,17 +279,36 @@ public class MessageTrigger implements StateUpdates{
//-----------------------------------------------------------------------------------------
@Override
public void send_error(DevFailed e, String desc) {
public void send_fault(DevFailed e, String desc) {
if(m_trigger_task!=null) m_trigger_task.stop();
logger.error(desc,e);
//logger.error(DevFailedUtils.toString(e));
logger.error(DevFailedUtils.toString(e));
setState(DeviceState.FAULT);
setStatus(desc+"\n\n"+DevFailedUtils.toString(e));
setStatus("FAULT: " + desc); // +"\n\n"+DevFailedUtils.toString(e));
}
@Override
public void send_alarm(DevFailed e, String desc) {
logger.warn(desc,e);
logger.warn(DevFailedUtils.toString(e));
setState(DeviceState.ALARM);
setStatus("ALARM: " + desc);
}
@Override
public void update_log(String message) {
logger.info(message);
public void send_info(String desc) {
logger.info(desc);
setStatus("INFO: " + desc+ "\n\n" +getStatus());
}
@Override
public void clean_status() {
setState(DeviceState.ON);
setStatus(m_monitored_attributes_string);
}
}
\ No newline at end of file
package fr.soleil.device.messagetrigger;
package fr.soleil.tango.server.messagetrigger;
import fr.esrf.Tango.DevFailed;
......@@ -7,6 +7,8 @@ import fr.esrf.Tango.DevFailed;
//-----------------------------------------------------------------------------------------
public interface StateUpdates
{
void send_error(DevFailed e, String desc);
void update_log(String message);
void clean_status();
void send_fault(DevFailed e, String desc);
void send_alarm(DevFailed e, String desc);
void send_info(String desc);
}
package fr.soleil.device.messagetrigger;
package fr.soleil.tango.server.messagetrigger;
import java.util.HashMap;
import java.util.Timer;
......@@ -67,6 +67,9 @@ final public class TriggerPulserTask extends TimerTask {
@Override
public void run() {
// Reseting status:
m_error_handler.clean_status();
//-----------------------------------------------------------------------------------------
// Checking text talker state
//-----------------------------------------------------------------------------------------
......@@ -76,13 +79,13 @@ final public class TriggerPulserTask extends TimerTask {
}
catch (DevFailed e)
{
m_error_handler.send_error(e, "FATAL: Cannot reach text talker");
m_error_handler.send_fault(e, "Cannot reach text talker");
return;
}
if(tmp_state == DevState.FAULT || tmp_state == DevState.ALARM)
{
m_error_handler.send_error(DevFailedUtils.newDevFailed( "Text Talker Device is not in a valid state!"),
"ERROR: Text Talker Device is in " + tmp_state.toString() + " state!\n");
m_error_handler.send_fault(DevFailedUtils.newDevFailed( "Text Talker Device is not in a valid state!"),
"Text Talker Device is in " + tmp_state.toString() + " state!\n");
return;
}
......@@ -98,18 +101,23 @@ final public class TriggerPulserTask extends TimerTask {
}
catch (DevFailed e)
{
m_error_handler.send_error(e, "FATAL: Cannot reach monitored device "+ device_name+"!");
m_error_handler.send_alarm(e, "Cannot reach monitored device "+ device_name+"!");
return;
}
// Check for invalid states
if(tmp_state == DevState.FAULT || tmp_state == DevState.ALARM)
if(tmp_state == DevState.FAULT)
{
m_error_handler.send_error(DevFailedUtils.newDevFailed( "Monitored Device is not in a valid state!"),
"ERROR: Monitored device is in " + tmp_state.toString() + " state!\n"+
m_error_handler.send_fault(DevFailedUtils.newDevFailed( "Monitored Device is not in a valid state!"),
"Monitored device is in " + tmp_state.toString() + " state!\n"+
"Device: " + device_name);
return;
}
if(tmp_state == DevState.ALARM)
{
m_error_handler.send_info("Monitored device " + device_name + " is in " + tmp_state.toString() + " state.");
}
}
//-----------------------------------------------------------------------------------------
......@@ -124,7 +132,7 @@ final public class TriggerPulserTask extends TimerTask {
}
catch (DevFailed e)
{
m_error_handler.send_error(e, "FATAL: Cannot check attribute " + m_monitored_attributes_list.get(i).get_name());
m_error_handler.send_fault(e, "Cannot check attribute " + m_monitored_attributes_list.get(i).get_name());
return;
}
......@@ -136,12 +144,12 @@ final public class TriggerPulserTask extends TimerTask {
{
m_text_talker.getTangoCommand("DevTalk").execute(String.class, tmp_message);
m_message_list.push_message(tmp_message);
m_error_handler.update_log( "Detected update on attribute: " + m_monitored_attributes_list.get(i).get_name()+"\n"+
m_error_handler.send_info( "Detected update on attribute: " + m_monitored_attributes_list.get(i).get_name()+"\n"+
"Sent message: " + tmp_message);
}
catch (DevFailed e)
{
m_error_handler.send_error(e, "FATAL: Cannot write message on Text Talker");
m_error_handler.send_fault(e, "Cannot write message on Text Talker");
return;
}
}
......
package fr.soleil.device.MessageTrigger;
import static org.hamcrest.core.Is.is;
import static org.junit.Assert.assertThat;
import org.junit.Test;
import org.tango.DeviceState;
import fr.soleil.device.messagetrigger.MessageTrigger;
public class MessageTriggerTest {
// @Test
// public void testInit() throws Exception {
// MessageTrigger instance = new MessageTrigger();
//
// instance.init();
//
// assertThat(instance.getState(), is(DeviceState.STANDBY));
// }
}
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment