Skip to content
Snippets Groups Projects
Commit 696268ad authored by florent langlois's avatar florent langlois
Browse files

first version

parents
Branches
Tags
No related merge requests found
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" output="target/classes" path="src/main/java">
<attributes>
<attribute name="optional" value="true"/>
<attribute name="maven.pomderived" value="true"/>
</attributes>
</classpathentry>
<classpathentry excluding="**" kind="src" output="target/classes" path="src/main/resources">
<attributes>
<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"/>
<attribute name="test" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8">
<attributes>
<attribute name="maven.pomderived" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
<attributes>
<attribute name="maven.pomderived" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="output" path="target/classes"/>
</classpath>
.settings/
target/
\ No newline at end of file
.project 0 → 100644
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>MessageTrigger</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.jdt.core.javabuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.m2e.core.maven2Builder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.jdt.core.javanature</nature>
<nature>org.eclipse.m2e.core.maven2Nature</nature>
</natures>
</projectDescription>
<?xml version="1.0" encoding="ASCII"?>
<pogoDsl:PogoSystem xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:pogoDsl="http://www.esrf.fr/tango/pogo/PogoDsl">
<classes name="Test" pogoRevision="9.5">
<description description="" title="" sourcePath="./" language="Java" filestogenerate="XMI file,Code files,Protected Regions" license="?" copyright="" hasMandatoryProperty="false" hasConcreteProperty="false" hasAbstractCommand="false" hasAbstractAttribute="false">
<inheritances classname="Device_Impl" sourcePath=""/>
<identification contact="hottois@synchrotron-soleil.fr" author="Antonin Hottois" emailDomain="" classFamily="DeviceServer" siteSpecific="?" platform="All" bus="?" manufacturer="none" reference=""/>
</description>
<commands name="State" description="This command gets the device state (stored in its device_state data member) and returns it to the caller." execMethod="dev_state" displayLevel="OPERATOR" polledPeriod="0">
<argin description="none">
<type xsi:type="pogoDsl:VoidType"/>
</argin>
<argout description="Device state">
<type xsi:type="pogoDsl:StateType"/>
</argout>
<status abstract="true" inherited="true" concrete="true"/>
</commands>
<commands name="Status" description="This command gets the device status (stored in its device_status data member) and returns it to the caller." execMethod="dev_status" displayLevel="OPERATOR" polledPeriod="0">
<argin description="none">
<type xsi:type="pogoDsl:VoidType"/>
</argin>
<argout description="Device status">
<type xsi:type="pogoDsl:ConstStringType"/>
</argout>
<status abstract="true" inherited="true" concrete="true"/>
</commands>
<preferences docHome="./docs" makefileHome="$(TANGO_HOME)"/>
</classes>
</pogoDsl:PogoSystem>
\ No newline at end of file
# Welcome to Tango-Controls server MessageTrigger
Clone this repo and build single executable jar using maven:
```bash
$> mvn package
```
Run the server:
```bash
$> java -jar target/MessageTrigger-0.0.1-SNAPSHOT.jar
```
\ No newline at end of file
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>MessageTrigger</title>
</head>
<body>
<h1>Welcome to MessageTrigger</h1>
<p>
If you are using GitHub you may want to set up your repository to render this documentation using GitHub pages. For this, in your repository go to settings and activate GitHub pages.
</p>
</body>
</html>
\ No newline at end of file
pom.xml 0 → 100644
<?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.device</groupId>
<artifactId>MessageTrigger</artifactId>
<version>0.0.1-SNAPSHOT</version>
<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>
<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>10.0.0</version>
<type>pom</type>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.3</version>
</dependency>
</dependencies>
<build>
<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>
<!-- 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
package fr.soleil.device.MessageTrigger;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
//import org.slf4j.ext.XLogger;
//import org.slf4j.ext.XLoggerFactory;
import org.tango.DeviceState;
import org.tango.server.ServerManager;
import org.tango.server.annotation.Attribute;
import org.tango.server.annotation.Command;
import org.tango.server.annotation.Device;
import org.tango.server.annotation.DeviceProperty;
import org.tango.server.annotation.Init;
import org.tango.server.annotation.State;
import org.tango.server.annotation.StateMachine;
import org.tango.server.annotation.Status;
/**
* MessageTrigger Tango-Controls server
*
* @author Antonin Hottois <hottois@synchrotron-soleil.fr>
* @since Wed Apr 01 17:35:47 CEST 2020
*/
@Device
public class MessageTrigger {
private final Logger logger = LoggerFactory.getLogger(MessageTrigger.class);
// private final XLogger xlogger = XLoggerFactory.getXLogger(MessageTrigger.class);
private TriggerPulserTask m_trigger_task;
//-----------------------------------------------------------------------------------------
// ATTRIBUTES
//-----------------------------------------------------------------------------------------
@Attribute
public long sentMessageList;
//-----------------------------------------------------------------------------------------
// PROPERTIES
//-----------------------------------------------------------------------------------------
@DeviceProperty (defaultValue = "0", description = "TODO")
private String[] MessageList;
public void setMessageList(String[] MessageList) {
this.MessageList = MessageList;
}
@DeviceProperty (defaultValue = "0", description = "TODO")
private String TangoParserProxy;
public void setTangoParserProxy(String TangoParserProxy) {
this.TangoParserProxy = TangoParserProxy;
}
@DeviceProperty (defaultValue = "0", description = "TODO")
private String TextTalkerProxy;
public void setTextTalkerProxy(String TextTalkerProxy) {
this.TextTalkerProxy = TextTalkerProxy;
}
@DeviceProperty (defaultValue = "1000", description = "Polling period in seconds.")
private int PollingPeriod;
public void setTextTalkerProxy(int PollingPeriod) {
this.PollingPeriod = PollingPeriod;
}
//-----------------------------------------------------------------------------------------
// STATE
//-----------------------------------------------------------------------------------------
@State
private volatile DeviceState state;
public DeviceState getState() {
return state;
}
public void setState(DeviceState state) {
this.state = state;
}
//-----------------------------------------------------------------------------------------
// STATUS
//-----------------------------------------------------------------------------------------
@Status
private String status;
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
//-----------------------------------------------------------------------------------------
// INIT
//-----------------------------------------------------------------------------------------
@Init
// @StateMachine(endState = DeviceState.ON)
public void init() throws Exception {
// xlogger.entry();
m_trigger_task = new TriggerPulserTask( PollingPeriod );
setState(DeviceState.STANDBY);
// xlogger.exit();
}
//-----------------------------------------------------------------------------------------
// MAIN
//-----------------------------------------------------------------------------------------
public static void main(String[] args) {
ServerManager.getInstance().start(args, MessageTrigger.class);
}
//-----------------------------------------------------------------------------------------
// ATTRIBUTE sentMessageList
//-----------------------------------------------------------------------------------------
public long getSentMessageList()
{
logger.debug("getSentMessageList {}", sentMessageList);
return sentMessageList;
}
public void setSentMessageList(final long _time)
{
logger.debug("setSentMessageList {}", sentMessageList);
}
//-----------------------------------------------------------------------------------------
// COMMANDS
//-----------------------------------------------------------------------------------------
@Command
//@StateMachine(deniedStates = { DeviceState.FAULT, DeviceState.ALARM})
public void stop()
{
}
@Command
//@StateMachine(deniedStates = { DeviceState.FAULT, DeviceState.ALARM})
public void start()
{
}
@Command
//@StateMachine(deniedStates = { DeviceState.FAULT, DeviceState.ALARM})
public void clearMessageList()
{
}
@Command
//@StateMachine(deniedStates = { DeviceState.FAULT, DeviceState.ALARM})
public void defferedInit()
{
}
}
\ No newline at end of file
package fr.soleil.device.MessageTrigger;
import java.util.Timer;
import java.util.TimerTask;
public class TriggerPulserTask extends TimerTask {
private Timer m_timer;
public TriggerPulserTask(int pollingPeriod)
{
m_timer = new Timer();
m_timer.scheduleAtFixedRate(this , 0, pollingPeriod);
}
@Override
public void run() {
// TODO Auto-generated method stub
}
}
<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
<property name="pattern" value="%-5level %d [%thread - %X{deviceName}] %logger{36}.%M:%L - %msg%n"/>
<!-- this appender accepts only error messages and sends them to System.err -->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<Target>System.err</Target>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<encoder>
<pattern>${pattern}</pattern>
</encoder>
</appender>
<appender name="CONSOLE-REQUEST" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>REQUEST %d [%X{deviceName}] - %msg%n</pattern>
</encoder>
</appender>
<!-- This appender splits logs by device-->
<appender name="SIFT" class="ch.qos.logback.classic.sift.SiftingAppender">
<discriminator>
<Key>deviceName</Key>
<DefaultValue>UNKNOWN_DEVICE_NAME</DefaultValue>
</discriminator>
<sift>
<appender name="FILE-${deviceName}" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${deviceName}.log</file>
<Append>true</Append>
<rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
<fileNamePattern>${deviceName}%i.log</fileNamePattern>
<minIndex>1</minIndex>
<maxIndex>3</maxIndex>
</rollingPolicy>
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<MaxFileSize>10MB</MaxFileSize>
</triggeringPolicy>
<encoder>
<pattern>${pattern}</pattern>
</encoder>
</appender>
</sift>
</appender>
<!-- Write files asynchronously -->
<appender name="ASYNC" class="ch.qos.logback.classic.AsyncAppender">
<appender-ref ref="SIFT"/>
</appender>
<logger name="org.jacorb" level="OFF" />
<logger name="org.tango" level="ERROR" />
<logger name="org.quartz" level="OFF" />
<logger name="net.sf.ehcache" level="OFF"/>
<logger name="ch.qos.logback" level="OFF"/>
<logger name="TangoClientRequests" level="OFF" additivity="false">
<appender-ref ref="CONSOLE-REQUEST" />
</logger>
<root level="DEBUG">
<appender-ref ref="CONSOLE" />
<appender-ref ref="ASYNC" />
</root>
</configuration>
\ No newline at end of file
package fr.soleil.device.MessageTrigger;
import static org.hamcrest.core.Is.is;
import static org.junit.Assert.assertThat;
import fr.soleil.device.MessageTrigger.MessageTrigger;
import org.junit.Test;
import org.tango.DeviceState;
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
<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%-5level %d [%thread - %X{deviceName}] %logger{36}.%M:%L - %msg%n</pattern>
</encoder>
</appender>
<appender name="CONSOLE-REQUEST" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>REQUEST %d [%X{deviceName}] - %msg%n</pattern>
</encoder>
</appender>
<logger name="org.jacorb" level="OFF" />
<logger name="org.tango" level="ERROR" />
<logger name="org.quartz" level="OFF" />
<logger name="net.sf.ehcache" level="OFF"/>
<logger name="ch.qos.logback" level="OFF"/>
<logger name="TangoClientRequests" level="OFF" additivity="false">
<appender-ref ref="CONSOLE-REQUEST" />
</logger>
<root level="INFO">
<appender-ref ref="CONSOLE" />
</root>
</configuration>
\ 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