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

1.0.7: concurrency and status changes

parent c6ed36b8
No related branches found
No related tags found
No related merge requests found
......@@ -21,6 +21,7 @@ final public class AttributeParser {
* Constructor
*
* @param messageString
* @throws DevFailed
*/
public AttributeParser(String messageString) throws DevFailed {
// Split the message
......
......@@ -32,7 +32,6 @@ public class MessageTrigger implements StateUpdates {
private MessagesQueue sentMessagesQueue;
private TangoDevice textTalkerDevice;
private String monitoredAttributesString;
private boolean isStatusClean;
// Property MessageList
......@@ -74,7 +73,7 @@ public class MessageTrigger implements StateUpdates {
return state;
}
// This might be accessed from the monitoring thread
// This might be accessed from the monitoring thread, hence the synchronization
public synchronized void setState(DeviceState state) {
this.state = state;
}
......@@ -88,7 +87,7 @@ public class MessageTrigger implements StateUpdates {
return status;
}
// This might be accessed from the monitoring thread
// This might be accessed from the monitoring thread, hence the synchronization
public synchronized void setStatus(String status) {
this.status = status;
}
......@@ -111,7 +110,6 @@ public class MessageTrigger implements StateUpdates {
setState(DeviceState.INIT);
setStatus("Initializing...");
isStatusClean = false;
// Initializing message list
sentMessagesQueue = new MessagesQueue();
......@@ -142,7 +140,6 @@ public class MessageTrigger implements StateUpdates {
monitoredAttributesList.clear();
// Retrieving all attributes from message list
for(int i=0; i<MessageList.length; i++)
{
......@@ -238,9 +235,8 @@ public class MessageTrigger implements StateUpdates {
logger.error(desc, e);
logger.error(DevFailedUtils.toString(e));
isStatusClean = false;
setState(DeviceState.FAULT);
setStatus("FAULT: " + desc + "\n" + "Use init to restart"); // +"\n\n"+DevFailedUtils.toString(e));
setStatus("FAULT: " + desc + "\n" + "Use init to restart!"); // +"\n\n"+DevFailedUtils.toString(e));
}
// ALARM: warning: logs the error and set the device in ALARM state.
......@@ -249,26 +245,21 @@ public class MessageTrigger implements StateUpdates {
logger.warn(desc, e);
logger.warn(DevFailedUtils.toString(e));
isStatusClean = false;
setState(DeviceState.ALARM);
setStatus("ALARM: " + desc + monitoredAttributesString);
setStatus("ALARM: " + desc + "\n\n" + monitoredAttributesString);
}
// INFO: update status and log the event
@Override
public void sendInfo(String desc) {
logger.info(desc);
isStatusClean = false;
setStatus("INFO: " + desc + "\n\n" + monitoredAttributesString);
setStatus("INFO: " + desc + "\n" + monitoredAttributesString);
}
// Reset the status
@Override
public void cleanStatus() {
if(!isStatusClean) {
setState(DeviceState.ON);
setStatus(monitoredAttributesString);
}
}
\ No newline at end of file
}
\ No newline at end of file
......@@ -23,9 +23,17 @@ final public class TriggerPulserTask extends TimerTask {
// Variables for temporary stockage
private String tmpMessage;
private DevState tmpState;
private boolean isStatusClean;
private String infoString;
/**
* Constructor
* @param pollingPeriod
* @param monitoredAttributesList
* @param monitoredDevicesMap
* @param textTalkerDevice
* @param sentMessagesQueue
* @param errorHandler
*/
public TriggerPulserTask(int pollingPeriod,
List<AttributeParser> monitoredAttributesList,
......@@ -39,6 +47,9 @@ final public class TriggerPulserTask extends TimerTask {
this.errorHandler = errorHandler;
this.sentMessagesQueue = sentMessagesQueue;
this.monitoredDevicesMap = monitoredDevicesMap;
infoString = new String();
isStatusClean = false;
// Starting polling
timer = new Timer();
......@@ -61,19 +72,20 @@ final public class TriggerPulserTask extends TimerTask {
@Override
public void run() {
// Reset status
errorHandler.cleanStatus();
infoString = "";
// Checking text talker state
try {
tmpState = textTalkerDevice.state();
} catch (DevFailed e) {
errorHandler.sendAlarm(e, "Cannot reach text talker");
isStatusClean = false;
return;
}
if (tmpState == DevState.FAULT || tmpState == DevState.ALARM) {
errorHandler.sendAlarm(DevFailedUtils.newDevFailed( "Text Talker Device is not in a valid state!"),
"Text Talker Device is in " + tmpState.toString() + " state!");
isStatusClean = false;
return;
}
......@@ -84,6 +96,7 @@ final public class TriggerPulserTask extends TimerTask {
tmpState = monitoredDevicesMap.get(device_name).state();
} catch (DevFailed e) {
errorHandler.sendAlarm(e, "Cannot reach monitored device " + device_name + "!");
isStatusClean = false;
return;
}
......@@ -92,14 +105,22 @@ final public class TriggerPulserTask extends TimerTask {
errorHandler.sendAlarm(DevFailedUtils.newDevFailed( "Monitored Device is not in a valid state!"),
"Monitored device is in " + tmpState.toString() + " state!\n" +
"Device: " + device_name);
isStatusClean = false;
return;
}
if (tmpState == DevState.ALARM) {
errorHandler.sendInfo("Monitored device " + device_name + " is in " + tmpState.toString() + " state.");
infoString+="Monitored device " + device_name + " is in " + tmpState.toString() + " state.\n";
isStatusClean = false;
}
}
// Send the string to status
if(!infoString.contentEquals(""))
{
errorHandler.sendInfo(infoString);
}
// Going through monitored attributes
for (int i = 0; i < monitoredAttributesList.size(); i++) {
// Try to check the current attribute
......@@ -107,6 +128,7 @@ final public class TriggerPulserTask extends TimerTask {
tmpMessage = monitoredAttributesList.get(i).checkAttribute();
} catch (DevFailed e) {
errorHandler.sendFault(e, "Cannot check attribute " + monitoredAttributesList.get(i).getName());
isStatusClean = false;
return;
}
......@@ -116,8 +138,10 @@ final public class TriggerPulserTask extends TimerTask {
try {
textTalkerDevice.getTangoCommand("DevTalk").execute(String.class, tmpMessage);
sentMessagesQueue.pushMessage(tmpMessage);
errorHandler.sendInfo( "Detected update on attribute: " + monitoredAttributesList.get(i).getName() + "\n" +
"Sent message: " + tmpMessage);
infoString += "Detected update on attribute: " + monitoredAttributesList.get(i).getName() + "\n" +
"Sent message: " + tmpMessage + "\n";
errorHandler.sendInfo(infoString);
isStatusClean = false;
} catch (DevFailed e) {
errorHandler.sendFault(e, "Cannot write message on Text Talker");
return;
......@@ -132,5 +156,11 @@ final public class TriggerPulserTask extends TimerTask {
}
}
}
if(infoString.contentEquals("") && !isStatusClean) {
errorHandler.cleanStatus();
isStatusClean = true;
}
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment