Skip to content
Snippets Groups Projects
Commit c9e57a72 authored by Gwenaelle ABEILLE's avatar Gwenaelle ABEILLE
Browse files

Merge branch 'TANGOARCH-875' into 'master'

Refactoring TDB/HDB (https://jira.synchrotron-soleil.fr/jira/browse/TANGOARCH-875)

Closes TANGOARCH-875

See merge request !1
parents e2dda4d1 0dd2859c
No related branches found
No related tags found
1 merge request!1Refactoring TDB/HDB (https://jira.synchrotron-soleil.fr/jira/browse/TANGOARCH-875)
...@@ -7,13 +7,8 @@ import org.slf4j.Logger; ...@@ -7,13 +7,8 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.tango.DeviceState; import org.tango.DeviceState;
import org.tango.server.ServerManager; import org.tango.server.ServerManager;
import org.tango.server.annotation.Attribute; import org.tango.server.annotation.*;
import org.tango.server.annotation.Command; import org.tango.utils.DevFailedUtils;
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.Status;
import java.util.ResourceBundle; import java.util.ResourceBundle;
import java.util.Set; import java.util.Set;
...@@ -79,58 +74,34 @@ import java.util.Set; ...@@ -79,58 +74,34 @@ import java.util.Set;
@Device @Device
public class ArchivingManager { public class ArchivingManager {
private static final String DEFAULT_ARCHIVER_CLASS = ConfigConst.HDB_CLASS_DEVICE;
private static String VERSION; private static String VERSION;
private final Logger logger = LoggerFactory.getLogger(ArchivingManager.class); private final Logger logger = LoggerFactory.getLogger(ArchivingManager.class);
@DeviceProperty @DeviceProperty(name = "DbPort")
protected String tdbPort = ""; protected String dbPort = "";
@DeviceProperty
protected String hdbPort = "";
/** /**
* Computer identifier on wich is settled the database DB. The identifier * Computer identifier on wich is settled the database. The identifier
* can be the computer name or its IP address. <br> * can be the computer name or its IP address. <br>
* <b>Default value : </b> hdb * <b>Default value : </b>
*/ */
@DeviceProperty @DeviceProperty(name = "DbHost", description = "Computer identifier on wich is settled the database. The identifier can be the computer name or its IP address.")
private String hdbHost = ""; private String dbHost = "";
/** /**
* Database name.<br> * Database name.<br>
* <b>Default value : </b> hdb * <b>Default value : </b>
*/ */
@DeviceProperty @DeviceProperty(name = "DbName", description = "Database name.")
private String hdbName = ""; private String dbName = "";
/** /**
* Computer identifier on wich is settled the database TDB. The identifier * User identifier (name) used to connect the database.
* can be the computer name or its IP address. <br>
* <b>Default value : </b> tdb
*/
@DeviceProperty
private String tdbHost = "";
/**
* Database name.<br>
* <b>Default value : </b> tdb
*/
@DeviceProperty
private String tdbName = "";
/**
* User identifier (name) used to connect the historical database.
*/
@DeviceProperty
private String hdbUser = "";
/**
* Password used to connect the historical database.
*/
@DeviceProperty
private String hdbPassword = "";
/**
* User identifier (name) used to connect the temporary database.
*/ */
@DeviceProperty @DeviceProperty(name = "DbUser", description = "User identifier (name) used to connect the database.")
private String tdbUser = ""; private String dbUser = "";
/** /**
* Password used to connect the temporary database. * Password used to connect the database.
*/ */
@DeviceProperty @DeviceProperty(name = "DbPassword", description = "Password used to connect the database.")
private String tdbPassword = ""; private String dbPassword = "";
/** /**
* true if the ORACLE RAC connection is activated. This information is * true if the ORACLE RAC connection is activated. This information is
* appended to all device's (or attributes) name. false otherwise.<br> * appended to all device's (or attributes) name. false otherwise.<br>
...@@ -140,40 +111,66 @@ public class ArchivingManager { ...@@ -140,40 +111,66 @@ public class ArchivingManager {
//private boolean hdbRacConnection; //private boolean hdbRacConnection;
//@DeviceProperty //@DeviceProperty
//private boolean tdbRacConnection; //private boolean tdbRacConnection;
@DeviceProperty @DeviceProperty(name = "DbSchema", description = "Database schema")
private String hdbSchema = ""; private String dbSchema = "";
@DeviceProperty @DeviceProperty(name = "DbType", description = "POSTGRESQL if you want to use Timeseries")
private String tdbSchema = ""; private String dbType = "";
@DeviceProperty @DeviceProperty(name = "ArchiverClass", description = "archiving device class to monitor")
private String hdbDbType = ""; private String archiverClass = DEFAULT_ARCHIVER_CLASS;
@DeviceProperty
private String tdbDbType = "";
@State @State
private DeviceState state; private DeviceState state;
@Status @Status
private String status; private String status;
private IArchivingAccess databaseAccessHDB; private IArchivingAccess databaseAccess;
private IArchivingAccess databaseAccessTDB;
public static void main(final String[] args) { public static void main(final String[] args) {
VERSION = ResourceBundle.getBundle("application").getString("project.version"); VERSION = ResourceBundle.getBundle("application").getString("project.version");
ServerManager.getInstance().start(args, ArchivingManager.class); ServerManager.getInstance().start(args, ArchivingManager.class);
} }
public void setTdbPort(final String tdbPort) { private static DatabaseConnectionConfig getDatabaseConnectionConfig(String archiverClassName) {
this.tdbPort = tdbPort; final DatabaseConnectionConfig params = new DatabaseConnectionConfig();
// get default value from class properties of HDBArchiver
DatabaseConnectionConfig.TangoDbProperties tangoDbProperties =
new DatabaseConnectionConfig.TangoDbProperties("dbType", "dbHost", "dbName",
"dbSchema", "dbUser", "dbPassword",
"dbMinPoolSize", "dbMaxPoolSize",
"dbCnxInactivityTimeout", "dbPort");
// retrieve archiver class properties
params.setParametersFromTango(archiverClassName, tangoDbProperties);
return params;
}
public void setDbPort(String dbPort) {
this.dbPort = dbPort;
}
public void setDbHost(String dbHost) {
this.dbHost = dbHost;
} }
public void setHdbPort(final String hdbPort) { public void setDbName(String dbName) {
this.hdbPort = hdbPort; this.dbName = dbName;
} }
public void setHdbDbType(final String hdbDbType) { public void setDbUser(String dbUser) {
this.hdbDbType = hdbDbType; this.dbUser = dbUser;
} }
public void setTdbDbType(final String tdbDbType) { public void setDbPassword(String dbPassword) {
this.tdbDbType = tdbDbType; this.dbPassword = dbPassword;
}
public void setDbType(String dbType) {
this.dbType = dbType;
}
public void setDbSchema(String dbSchema) {
this.dbSchema = dbSchema;
}
public void setArchiverClass(String archiverClass) {
this.archiverClass = archiverClass;
} }
@Attribute @Attribute
...@@ -196,91 +193,46 @@ public class ArchivingManager { ...@@ -196,91 +193,46 @@ public class ArchivingManager {
private void connect() { private void connect() {
StringBuilder statusBuilder = new StringBuilder(); StringBuilder statusBuilder = new StringBuilder();
final boolean isHdb = ConfigConst.HDB_CLASS_DEVICE.equals(archiverClass);
try { try {
connectHdb(); connectDb();
Set<String> archivers = databaseAccessHDB.getExportedArchiverList(); Set<String> archivers = databaseAccess.getExportedArchiverList();
statusBuilder.append("- ").append(archivers.size()).append(" HDB Archivers: ") statusBuilder.append("- ").append(archivers.size()).append(isHdb ? " HBD" : " TDB").append(" Archivers: ")
.append(archivers).append("\n");
} catch (Throwable e) {
logger.warn("cannot connect to hdb ", e);
statusBuilder.append("- HDB is not available").append("\n");
}
try {
connectTdb();
Set<String> archivers = databaseAccessTDB.getExportedArchiverList();
statusBuilder.append("- ").append(archivers.size()).append(" TDB Archivers: ")
.append(archivers).append("\n"); .append(archivers).append("\n");
} catch (Throwable e) { } catch (Throwable e) {
logger.warn("cannot connect to tdb ", e); logger.warn("cannot connect to " + (isHdb ? "HDB" : "TDB"), e);
statusBuilder.append("- TDB is not available").append("\n"); statusBuilder.append("- ").append(isHdb ? "HDB " : "TDB ").append("is not available").append("\n");
} }
state = DeviceState.ON; state = DeviceState.ON;
status = statusBuilder.toString(); status = statusBuilder.toString();
} }
private void connectHdb() throws DevFailed { private void connectDb() throws DevFailed {
final DatabaseConnectionConfig params = getDatabaseConnectionConfig(ConfigConst.HDB_CLASS_DEVICE); final boolean isHdb = ConfigConst.HDB_CLASS_DEVICE.equals(archiverClass);
if (!hdbHost.isEmpty()) final DatabaseConnectionConfig params = getDatabaseConnectionConfig(isHdb ? ConfigConst.HDB_CLASS_DEVICE : ConfigConst.TDB_CLASS_DEVICE);
params.setHost(hdbHost); if (!dbHost.isEmpty())
if (!hdbUser.isEmpty()) params.setHost(dbHost);
params.setUser(hdbUser); if (!dbUser.isEmpty())
if (!hdbPassword.isEmpty()) params.setUser(dbUser);
params.setPassword(hdbPassword); if (!dbPassword.isEmpty())
if (!hdbName.isEmpty()) params.setPassword(dbPassword);
params.setName(hdbName); if (!dbName.isEmpty())
if (!hdbSchema.isEmpty()) params.setName(dbName);
params.setSchema(hdbSchema); if (!dbSchema.isEmpty())
if (!hdbPort.isEmpty()) params.setSchema(dbSchema);
params.setPort(hdbPort); if (!dbPort.isEmpty())
if (!hdbDbType.isEmpty()) params.setPort(dbPort);
params.setDbType(DatabaseConnectionConfig.DataBaseType.parseDataBaseType(hdbDbType)); if (!dbType.isEmpty())
logger.debug("connecting to HDB with parameters {}", params); params.setDbType(DatabaseConnectionConfig.DataBaseType.parseDataBaseType(dbType));
if (params.getDbType().equals(DatabaseConnectionConfig.DataBaseType.POSTGRESQL)) { logger.debug("connecting to {} with parameters {}", isHdb ? "HDB" : "TDB", params);
databaseAccessHDB = new TimeseriesAccess();
} else {
databaseAccessHDB = new HDBTDBAccess();
}
databaseAccessHDB.connect(params, true);
}
protected void connectTdb() throws DevFailed {
final DatabaseConnectionConfig params = getDatabaseConnectionConfig(ConfigConst.TDB_CLASS_DEVICE);
if (!tdbHost.isEmpty())
params.setHost(tdbHost);
if (!tdbUser.isEmpty())
params.setUser(tdbUser);
if (!tdbPassword.isEmpty())
params.setPassword(tdbPassword);
if (!tdbName.isEmpty())
params.setName(tdbName);
if (!tdbSchema.isEmpty())
params.setSchema(tdbSchema);
if (!tdbDbType.isEmpty()) {
params.setDbType(DatabaseConnectionConfig.DataBaseType.valueOf(tdbDbType));
}
if (!tdbPort.isEmpty())
params.setPort(tdbPort);
logger.debug("connecting to TDB with parameters {}", params);
if (params.getDbType().equals(DatabaseConnectionConfig.DataBaseType.POSTGRESQL)) { if (params.getDbType().equals(DatabaseConnectionConfig.DataBaseType.POSTGRESQL)) {
databaseAccessTDB = new TimeseriesAccess(); databaseAccess = new TimeseriesAccess();
} else { } else {
databaseAccessTDB = new HDBTDBAccess(); databaseAccess = new HDBTDBAccess();
}
databaseAccessTDB.connect(params, false);
} }
databaseAccess.connect(params, isHdb);
private static DatabaseConnectionConfig getDatabaseConnectionConfig(String archiverClassName) {
final DatabaseConnectionConfig params = new DatabaseConnectionConfig();
// get default value from class properties of HDBArchiver
DatabaseConnectionConfig.TangoDbProperties tangoDbProperties =
new DatabaseConnectionConfig.TangoDbProperties("dbType", "dbHost", "dbName",
"dbSchema", "dbUser", "dbPassword",
"dbMinPoolSize", "dbMaxPoolSize",
"dbCnxInactivityTimeout", "dbPort");
// retrieve archiver class properties
params.setParametersFromTango(archiverClassName, tangoDbProperties);
return params;
} }
@Command @Command
...@@ -297,30 +249,19 @@ public class ArchivingManager { ...@@ -297,30 +249,19 @@ public class ArchivingManager {
} }
/** /**
* Execute command "ArchivingStopHdb" on device. Stops the historical * Execute command "ArchivingStop" on device. Stops the
* archiving for the given attributes.
*
* @param argin The attribute list.
*/
@Command(name = "ArchivingStopHdb", inTypeDesc = "The attribute list")
public String archivingStopHdb(final String[] argin) throws DevFailed {
return databaseAccessHDB.archivingStop(argin);
}
/**
* Execute command "ArchivingStopTdb" on device. Stops the temporary
* archiving for the given attributes. * archiving for the given attributes.
* *
* @param argin The attribute list. * @param argin The attribute list.
*/ */
@Command(name = "ArchivingStopTdb") @Command(name = "ArchivingStop", inTypeDesc = "The attribute list")
public String archivingStopTdb(final String[] argin) throws DevFailed { public String archivingStop(final String[] argin) throws DevFailed {
return databaseAccessTDB.archivingStop(argin); return databaseAccess.archivingStop(argin);
} }
/** /**
* Execute command "ArchivingModifHdb" on device. Change the mode of an * Execute command "ArchivingModif" on device. Change the mode of an
* historical archiving. * archiving.
* *
* @param argin The configuration to switch to... <br> * @param argin The configuration to switch to... <br>
* <blockquote> * <blockquote>
...@@ -328,7 +269,7 @@ public class ArchivingManager { ...@@ -328,7 +269,7 @@ public class ArchivingManager {
* <li><strong>The first part :</strong> * <li><strong>The first part :</strong>
* <ul> * <ul>
* <li><var>argin</var>[0]<b> =</b> the load balancing type of the archiving<br> * <li><var>argin</var>[0]<b> =</b> the load balancing type of the archiving<br>
* &quot;1&quot;, if all the attribute are archived together in the same TdbArchiver device, <br> * &quot;1&quot;, if all the attribute are archived together in the same TdbArchiver/HDBArchiver device, <br>
* &quot;0&quot; otherwise. * &quot;0&quot; otherwise.
* <li><var>argin</var>[1]<b> =</b> the number of attributes to archive<br> * <li><var>argin</var>[1]<b> =</b> the number of attributes to archive<br>
* <li><var>argin</var>[2] to <var>argin</var> [2 + <var>argin</var>[1] - 1] = the name of each attribute * <li><var>argin</var>[2] to <var>argin</var> [2 + <var>argin</var>[1] - 1] = the name of each attribute
...@@ -379,13 +320,13 @@ public class ArchivingManager { ...@@ -379,13 +320,13 @@ public class ArchivingManager {
* </blockquote> * </blockquote>
* @see fr.soleil.archiving.hdbtdb.api.tools.ArchivingMessConfig * @see fr.soleil.archiving.hdbtdb.api.tools.ArchivingMessConfig
*/ */
@Command(name = "ArchivingModifHdb") @Command(name = "ArchivingModif", inTypeDesc = "The configuration to switch to")
public void archivingModifHdb(final String[] argin) throws DevFailed { public void archivingModif(final String[] argin) throws DevFailed {
databaseAccessHDB.archivingModif(argin); databaseAccess.archivingModif(argin);
} }
/** /**
* Execute command "ArchivingStartHdb" on device. Start an historical * Execute command "ArchivingStart" on device. Start an
* archiving for the specified attributes, and following the specified mode. * archiving for the specified attributes, and following the specified mode.
* *
* @param argin Archiving arguments... <BR> * @param argin Archiving arguments... <BR>
...@@ -394,7 +335,7 @@ public class ArchivingManager { ...@@ -394,7 +335,7 @@ public class ArchivingManager {
* <li><strong>The first part :</strong> * <li><strong>The first part :</strong>
* <ul> * <ul>
* <li><var>argin</var>[0]<b> =</b> the load balancing type of the archiving<br> * <li><var>argin</var>[0]<b> =</b> the load balancing type of the archiving<br>
* &quot;1&quot;, if all the attribute are archived together in the same HdbArchiver device, <br> * &quot;1&quot;, if all the attribute are archived together in the same TdbArchiver/HdbArchiver device, <br>
* &quot;0&quot; otherwise. * &quot;0&quot; otherwise.
* <li><var>argin</var>[1]<b> =</b> the number of attributes to archive<br> * <li><var>argin</var>[1]<b> =</b> the number of attributes to archive<br>
* <li><var>argin</var>[2] to <var>argin</var> [2 + <var>argin</var>[1] - 1] = the name of each attribute * <li><var>argin</var>[2] to <var>argin</var> [2 + <var>argin</var>[1] - 1] = the name of each attribute
...@@ -445,12 +386,12 @@ public class ArchivingManager { ...@@ -445,12 +386,12 @@ public class ArchivingManager {
* </blockquote> * </blockquote>
* @see fr.soleil.archiving.hdbtdb.api.tools.ArchivingMessConfig * @see fr.soleil.archiving.hdbtdb.api.tools.ArchivingMessConfig
*/ */
@Command(name = "ArchivingStartHdb") @Command(name = "ArchivingStart", inTypeDesc = "The configuration to start")
public void archivingStartHdb(final String[] argin) throws DevFailed { public void archivingStart(final String[] argin) throws DevFailed {
databaseAccessHDB.archivingStart(argin); databaseAccess.archivingStart(argin);
} }
@Command(name = "ArchivingStartHdbJson", inTypeDesc = "A JSON array. Example:\n [ {\n" + @Command(name = "ArchivingStartJson", inTypeDesc = "A JSON array. Example:\n [ {\n" +
" \"attributeFullName\" : \"tango/tangotest/1/ampli\",\n" + " \"attributeFullName\" : \"tango/tangotest/1/ampli\",\n" +
" \"archiverName\" : \"tango://fokrred\",\n" + " \"archiverName\" : \"tango://fokrred\",\n" +
" \"modes\" : {\n" + " \"modes\" : {\n" +
...@@ -499,240 +440,28 @@ public class ArchivingManager { ...@@ -499,240 +440,28 @@ public class ArchivingManager {
" \"event\" : false\n" + " \"event\" : false\n" +
" }\n" + " }\n" +
"} ]") "} ]")
public void archivingStartHdbJson(final String jsonAsString) throws DevFailed { public void archivingStartJson(final String jsonAsString) throws DevFailed {
databaseAccessHDB.archivingStartJson(jsonAsString); databaseAccess.archivingStartJson(jsonAsString);
}
@Command(name = "", inTypeDesc = "A JSON array. Example:\n [ {\n" +
" \"attributeFullName\" : \"tango/tangotest/1/ampli\",\n" +
" \"archiverName\" : \"tango://fokrred\",\n" +
" \"modes\" : {\n" +
" \"periodPeriodic\" : 20000,\n" +
" \"periodAbsolute\" : 0,\n" +
" \"decreaseDeltaAbsolute\" : 0.0,\n" +
" \"increaseDeltaAbsolute\" : 0.0,\n" +
" \"periodRelative\" : 1000,\n" +
" \"decreasePercentRelative\" : 10.0,\n" +
" \"increasePercentRelative\" : 10.0,\n" +
" \"periodThreshold\" : 0,\n" +
" \"minThresholdValue\" : 0.0,\n" +
" \"maxThresholdValue\" : 0.0,\n" +
" \"periodDifference\" : 0,\n" +
" \"absolute\" : false,\n" +
" \"threshold\" : false,\n" +
" \"periodic\" : true,\n" +
" \"relative\" : true,\n" +
" \"slowDriftRelative\" : true,\n" +
" \"difference\" : false,\n" +
" \"slowDriftAbsolute\" : false,\n" +
" \"event\" : false\n" +
" }\n" +
"}, {\n" +
" \"attributeFullName\" : \"tango/tangotest/2/ampli\",\n" +
" \"archiverName\" : \"\",\n" +
" \"modes\" : {\n" +
" \"periodPeriodic\" : 20000,\n" +
" \"periodAbsolute\" : 3000,\n" +
" \"decreaseDeltaAbsolute\" : 12.0,\n" +
" \"increaseDeltaAbsolute\" : 13.0,\n" +
" \"periodRelative\" : 1000,\n" +
" \"decreasePercentRelative\" : 0.0,\n" +
" \"increasePercentRelative\" : 0.0,\n" +
" \"periodThreshold\" : 0,\n" +
" \"minThresholdValue\" : 0.0,\n" +
" \"maxThresholdValue\" : 0.0,\n" +
" \"periodDifference\" : 0,\n" +
" \"absolute\" : true,\n" +
" \"threshold\" : false,\n" +
" \"periodic\" : true,\n" +
" \"relative\" : false,\n" +
" \"slowDriftRelative\" : true,\n" +
" \"difference\" : false,\n" +
" \"slowDriftAbsolute\" : false,\n" +
" \"event\" : false\n" +
" }\n" +
"} ]")
public void archivingStartTdbJson(final String jsonAsString) throws DevFailed {
databaseAccessTDB.archivingStartJson(jsonAsString);
}
/**
* Execute command "ArchivingModifTdb" on device. Change the mode of a
* temporary archiving.
*
* @param argin The configuration to switch to...... <br>
* <blockquote>
* <ul>
* <li><strong>The first part :</strong>
* <ul>
* <li><var>argin</var>[0]<b> =</b> the load balancing type of the archiving<br>
* &quot;1&quot;, if all the attribute are archived together in the same TdbArchiver device, <br>
* &quot;0&quot; otherwise.
* <li><var>argin</var>[1]<b> =</b> the number of attributes to archive<br>
* <li><var>argin</var>[2] to <var>argin</var> [2 + <var>argin</var>[1] - 1] = the name of each attribute
* </ul>
* <li><strong>The second part (the <i>Mode </i>part) :</strong> <br>
* Let us note <i>&quot;<var>index</var>&quot; </i>the last <var>index</var> used (for example, at this
* point, <i><var>index</var></i> = 2]).
* <ul>
* <li><strong>If the Mode is composed of a <i>Periodical Mode</i></strong><br>
* <var>argin</var>[<var>index</var>+ 1] = <code>MODE_P</code><br>
* <var>argin</var>[<var>index</var>+ 2] = the period of the periodic mode in (ms)<br>
* <var>index</var> = <var>index</var> + 2<br>
* <li><strong>If the Mode is composed of an <i>Absolute Mode</i></strong><br>
* <var>argin</var>[<var>index</var>+ 1] = <code>MODE_A</code><br>
* <var>argin</var>[<var>index</var>+ 2] = the frequency of the <i>absolute mode </i>in (ms)<br>
* <var>argin</var>[<var>index</var>+ 3] = the delta value max when decreasing<br>
* <var>argin</var>[<var>index</var>+ 4] = the delta value max when increasing<br>
* <var>index</var> = <var>index</var> + 4<br>
* <li><strong>If the Mode is composed of a <i>Relative Mode</i></strong><br>
* <var>argin</var>[<var>index</var>+ 1] = <code>MODE_R</code><br>
* <var>argin</var>[<var>index</var>+ 2] = the <i>frequency </i>of the <i>relative mode </i>in (ms)<br>
* <var>argin</var>[<var>index</var>+ 3] = the <i>decreasing variation </i>associated to this mode<br>
* <var>argin</var>[<var>index</var>+ 4] = the <i>increasing variation </i>associated to this mode<br>
* <var>index</var> = <var>index</var> + 4<br>
* <li><strong>If the Mode is composed of an <i>Threshold Mode</i></strong><br>
* <var>argin</var>[<var>index</var>+ 1] = <code>MODE_T</code><br>
* <var>argin</var>[<var>index</var>+ 2] = the frequency of the <i>threshold mode </i>in (ms)<br>
* <var>argin</var>[<var>index</var>+ 3] = the smallest value (min) when decreasing<br>
* <var>argin</var>[<var>index</var>+ 4] = the biggest value (max) when increasing<br>
* <var>index</var> = <var>index</var> + 4<br>
* <li>If the Mode is composed of a <i>On Calculation Mode</i></strong><br>
* <var>argin</var>[<var>index</var>+ 1] = <code>MODE_C</code><br>
* <var>argin</var>[<var>index</var>+ 2] = the <i>frequency </i>of the <i>on calculation mode </i>in (ms)
* <br>
* <var>argin</var>[<var>index</var>+ 3] = the <i>number of values</i> taken into account<br>
* <var>argin</var>[<var>index</var>+ 4] = the <i>type </i>associated to this mode<br>
* <var>argin</var>[<var>index</var>+ 5] = Not used at the moment <br>
* <var>index</var> = <var>index</var> + 5<br>
* <li><strong>If the Mode is composed of an <i>On Difference Mode</i></strong><br>
* <var>argin</var>[<var>index</var>+ 1] = <code>MODE_D</code><br>
* <var>argin</var>[<var>index</var>+ 2] = the <i>frequency </i>of this<i> mode </i>(in ms)<br>
* <var>index</var> = <var>index</var> + 2<br>
* <li><strong>If the Mode is composed of an <i>External Mode</i></strong><br>
* <var>argin</var>[<var>index</var>+ 1] = <code>MODE_E</code><br>
* <var>index</var> = <var>index</var> + 1<br>
* <li><strong>The Temporary (<i>Intermediate Archiving</i>) archiving specific informations </strong><br>
* <var>argin</var>[<var>index</var>+ 1] = <code>TDB_SPEC</code><br>
* <var>argin</var>[<var>index</var>+ 2] = the <i>export frequency </i>(ms)<br>
* <var>argin</var>[<var>index</var>+ 3] = the <i>keeping window duration </i>in (ms)<br>
* <var>index</var> = <var>index</var> + 3<br>
* </ul>
* </ul>
* </blockquote>
* @see fr.soleil.archiving.hdbtdb.api.tools.ArchivingMessConfig
*/
@Command(name = "ArchivingModifTdb")
public void archivingModifTdb(final String[] argin) throws DevFailed {
databaseAccessTDB.archivingModif(argin);
}
/**
* Execute command "ArchivingStartTdb" on device. Start an temporary
* archiving for the specified attributes, and following the specified mode.
*
* @param argin Archiving arguments... <BR>
* <blockquote>
* <ul>
* <li><strong>The first part :</strong>
* <ul>
* <li><var>argin</var>[0]<b> =</b> the load balancing type of the archiving<br>
* &quot;1&quot;, if all the attribute are archived together in the same HdbArchiver device, <br>
* &quot;0&quot; otherwise.
* <li><var>argin</var>[1]<b> =</b> the number of attributes to archive<br>
* <li><var>argin</var>[2] to <var>argin</var> [2 + <var>argin</var>[1] - 1] = the name of each attribute
* </ul>
* <li><strong>The second part (the <i>Mode </i>part) :</strong> <br>
* Let us note <i>&quot;<var>index</var>&quot; </i>the last <var>index</var> used (for example, at this
* point, <i><var>index</var></i> = 2]).
* <ul>
* <li><strong>If the Mode is composed of a <i>Periodical Mode</i></strong><br>
* <var>argin</var>[<var>index</var>+ 1] = <code>MODE_P</code><br>
* <var>argin</var>[<var>index</var>+ 2] = the period of the periodic mode in (ms)<br>
* <var>index</var> = <var>index</var> + 2<br>
* <li><strong>If the Mode is composed of an <i>Absolute Mode</i></strong><br>
* <var>argin</var>[<var>index</var>+ 1] = <code>MODE_A</code><br>
* <var>argin</var>[<var>index</var>+ 2] = the frequency of the <i>absolute mode </i>in (ms)<br>
* <var>argin</var>[<var>index</var>+ 3] = the delta value max when decreasing<br>
* <var>argin</var>[<var>index</var>+ 4] = the delta value max when increasing<br>
* <var>index</var> = <var>index</var> + 4<br>
* <li><strong>If the Mode is composed of a <i>Relative Mode</i></strong><br>
* <var>argin</var>[<var>index</var>+ 1] = <code>MODE_R</code><br>
* <var>argin</var>[<var>index</var>+ 2] = the <i>frequency </i>of the <i>relative mode </i>in (ms)<br>
* <var>argin</var>[<var>index</var>+ 3] = the <i>decreasing variation </i>associated to this mode<br>
* <var>argin</var>[<var>index</var>+ 4] = the <i>increasing variation </i>associated to this mode<br>
* <var>index</var> = <var>index</var> + 4<br>
* <li><strong>If the Mode is composed of an <i>Threshold Mode</i></strong><br>
* <var>argin</var>[<var>index</var>+ 1] = <code>MODE_T</code><br>
* <var>argin</var>[<var>index</var>+ 2] = the frequency of the <i>threshold mode </i>in (ms)<br>
* <var>argin</var>[<var>index</var>+ 3] = the smallest value (min) when decreasing<br>
* <var>argin</var>[<var>index</var>+ 4] = the biggest value (max) when increasing<br>
* <var>index</var> = <var>index</var> + 4<br>
* <li>If the Mode is composed of a <i>On Calculation Mode</i></strong><br>
* <var>argin</var>[<var>index</var>+ 1] = <code>MODE_C</code><br>
* <var>argin</var>[<var>index</var>+ 2] = the <i>frequency </i>of the <i>on calculation mode </i>in (ms)
* <br>
* <var>argin</var>[<var>index</var>+ 3] = the <i>number of values</i> taken into account<br>
* <var>argin</var>[<var>index</var>+ 4] = the <i>type </i>associated to this mode<br>
* <var>argin</var>[<var>index</var>+ 5] = Not used at the moment <br>
* <var>index</var> = <var>index</var> + 5<br>
* <li><strong>If the Mode is composed of an <i>On Difference Mode</i></strong><br>
* <var>argin</var>[<var>index</var>+ 1] = <code>MODE_D</code><br>
* <var>argin</var>[<var>index</var>+ 2] = the <i>frequency </i>of this<i> mode </i>(in ms)<br>
* <var>index</var> = <var>index</var> + 2<br>
* <li><strong>If the Mode is composed of an <i>External Mode</i></strong><br>
* <var>argin</var>[<var>index</var>+ 1] = <code>MODE_E</code><br>
* <var>index</var> = <var>index</var> + 1<br>
* <li><strong>The Temporary (<i>Intermediate Archiving</i>) archiving specific informations </strong><br>
* <var>argin</var>[<var>index</var>+ 1] = <code>TDB_SPEC</code><br>
* <var>argin</var>[<var>index</var>+ 2] = the <i>export frequency </i>(ms)<br>
* <var>argin</var>[<var>index</var>+ 3] = the <i>keeping window duration </i>in (ms)<br>
* <var>index</var> = <var>index</var> + 3<br>
* </ul>
* </ul>
* </blockquote>
* @see fr.soleil.archiving.hdbtdb.api.tools.ArchivingMessConfig
*/
@Command(name = "ArchivingStartTdb")
public void archivingStartTdb(final String[] argin) throws DevFailed {
databaseAccessTDB.archivingStart(argin);
} }
/** /**
* Execute command "IsArchivedHdb" on device. Check the archiving state * Execute command "IsArchived" on device. Check the archiving state
* (historical archiving) for each attribute of the given list. * for each attribute of the given list.
* *
* @param argin The attribute list. * @param argin The attribute list.
* @return For each attribute of the given list...<br> * @return For each attribute of the given list...<br>
* <ul> * <ul>
* <li><code>1</code>, if the attribute is currently being archived (historical archiving) * <li><code>1</code>, if the attribute is currently being archived
* <li><code>0</code>, otherwise * <li><code>0</code>, otherwise
* </ul> * </ul>
*/ */
@Command(name = "IsArchivedHdb") @Command(name = "IsArchived", inTypeDesc = "The attribute list to check", outTypeDesc = "The archiving state for each attribute")
public short[] isArchivedHdb(final String[] argin) throws DevFailed { public short[] isArchived(final String[] argin) throws DevFailed {
return databaseAccessHDB.isArchived(argin); return databaseAccess.isArchived(argin);
} }
/** /**
* Execute command "IsArchivedTdb" on device. Check the archiving state * Execute command "GetArchivingMode" on device. Return the
* (temporary archiving) for each attribute of the given list.
*
* @param argin The attribute list.
* @return For each attribute of the given list...<br>
* <ul>
* <li><code>1</code>, if the attribute is currently being archived (temporary archiving)
* <li><code>0</code>, otherwise
* </ul>
*/
@Command(name = "IsArchivedTdb")
public short[] isArchivedTdb(final String[] argin) throws DevFailed {
return databaseAccessTDB.isArchived(argin);
}
/**
* Execute command "GetArchivingModeHdb" on device. Return the historical
* archiving mode applied to an attribute. * archiving mode applied to an attribute.
* *
* @param argin The attribute name. * @param argin The attribute name.
...@@ -780,132 +509,47 @@ public class ArchivingManager { ...@@ -780,132 +509,47 @@ public class ArchivingManager {
* </ul> * </ul>
* </blockquote> * </blockquote>
*/ */
@Command(name = "GetArchivingModeHdb") @Command(name = "GetArchivingMode", inTypeDesc = "The attribute name", outTypeDesc = "The applied mode")
public String[] getArchivingModeHdb(final String argin) throws DevFailed { public String[] getArchivingMode(final String argin) throws DevFailed {
return databaseAccessHDB.getArchivingMode(argin); return databaseAccess.getArchivingMode(argin);
} }
/** /**
* Execute command "GetArchivingModeTdb" on device. Return the temporary * Execute command "GetStatus" on device. For each attribute of the given
* archiving mode applied to an attribute. * list, get the status of the device in charge of its archiving
*
* @param argin The attribute name.
* @return The applied mode... <br>
* <blockquote>
* <ul>
* Let us note <i>&quot;<var>index</var>&quot; </i>the last <var>index</var> used (for example, at this
* point, <i><var>index</var></i> = 0]).
* <li><strong>If the Mode is composed of a <i>Periodical Mode</i></strong><br>
* <var>argout</var>[<var>index</var>] = <code>MODE_P</code><br>
* <var>argout</var>[<var>index</var> + 1] = the period of the periodic mode in (ms)<br>
* <var>index</var> = <var>index</var> + 2<br>
* <li><strong>If the Mode is composed of an <i>Absolute Mode</i></strong><br>
* <var>argout</var>[<var>index</var>] = <code>MODE_A</code><br>
* <var>argout</var>[<var>index</var>+ 1] = the frequency of the <i>absolute mode </i>in (ms)<br>
* <var>argout</var>[<var>index</var>+ 2] = the delta value max when decreasing<br>
* <var>argout</var>[<var>index</var>+ 3] = the delta value max when increasing<br>
* <var>index</var> = <var>index</var> + 4<br>
* <li><strong>If the Mode is composed of a <i>Relative Mode</i></strong><br>
* <var>argout</var>[<var>index</var>] = <code>MODE_R</code><br>
* <var>argout</var>[<var>index</var>+ 1] = the <i>frequency </i>of the <i>relative mode </i>in (ms)<br>
* <var>argout</var>[<var>index</var>+ 2] = the <i>decreasing variation </i>associated to this mode<br>
* <var>argout</var>[<var>index</var>+ 3] = the <i>increasing variation </i>associated to this mode<br>
* <var>index</var> = <var>index</var> + 4<br>
* <li><strong>If the Mode is composed of an <i>Threshold Mode</i></strong><br>
* <var>argout</var>[<var>index</var>] = <code>MODE_T</code><br>
* <var>argout</var>[<var>index</var>+ 1] = the frequency of the <i>threshold mode </i>in (ms)<br>
* <var>argout</var>[<var>index</var>+ 2] = the smallest value (min) when decreasing<br>
* <var>argout</var>[<var>index</var>+ 3] = the biggest value (max) when increasing<br>
* <var>index</var> = <var>index</var> + 4<br>
* <li>If the Mode is composed of a <i>On Calculation Mode</i></strong><br>
* <var>argout</var>[<var>index</var>] = <code>MODE_C</code><br>
* <var>argout</var>[<var>index</var>+ 1] = the <i>frequency </i>of the <i>on calculation mode </i>in (ms)<br>
* <var>argout</var>[<var>index</var>+ 2] = the <i>number of values</i> taken into account<br>
* <var>argout</var>[<var>index</var>+ 3] = the <i>type </i>associated to this mode<br>
* <var>argout</var>[<var>index</var>+ 4] = Not used at the moment <br>
* <var>index</var> = <var>index</var> + 5<br>
* <li><strong>If the Mode is composed of an <i>On Difference Mode</i></strong><br>
* <var>argout</var>[<var>index</var>] = <code>MODE_D</code><br>
* <var>argout</var>[<var>index</var>+ 1] = the <i>frequency </i>of this<i> mode </i>(in ms)<br>
* <var>index</var> = <var>index</var> + 2<br>
* <li><strong>If the Mode is composed of an <i>External Mode</i></strong><br>
* <var>argout</var>[<var>index</var>] = <code>MODE_E</code><br>
* <var>index</var> = <var>index</var> + 1<br>
* <li><strong>The Temporary (<i>Intermediate Archiving</i>) archiving specific informations </strong><br>
* <var>argout</var>[<var>index</var>] = <code>TDB_SPEC</code><br>
* <var>argout</var>[<var>index</var>+ 1] = the <i>export frequency </i>(ms)<br>
* <var>argout</var>[<var>index</var>+ 2] = the <i>keeping window duration </i>in (ms)<br>
* <var>index</var> = <var>index</var> + 3<br>
* </ul>
* </blockquote>
*/
@Command(name = "GetArchivingModeTdb")
public String[] getArchivingModeTdb(final String argin) throws DevFailed {
return databaseAccessTDB.getArchivingMode(argin);
}
/**
* Execute command "GetStatusHdb" on device. For each attribute of the given
* list, get the status of the device in charge of its historical archiving
* *
* @param argin The attribute list. * @param argin The attribute list.
* @return The list of status. * @return The list of status.
*/ */
@Command(name = "GetStatusHdb") @Command(name = "GetStatus", inTypeDesc = "The attribute list", outTypeDesc = "The list of status")
public String[] getStatusHdb(final String[] argin) throws DevFailed { public String[] getStatus(final String[] argin) throws DevFailed {
return databaseAccessHDB.getStatus(argin); return databaseAccess.getStatus(argin);
} }
/** /**
* Execute command "GetStatusTdb" on device. For each attribute of the given * Create a new context in the database and returns the corresponding id
* list, get the status of the device in charge of its temporary archiving.
* *
* @param argin The attribute list. * @param argin contextName,contextDescription
* @return The list of status. * @return contextId
* @throws DevFailed if the context cannot be created or if you are using HDB or TDB
*/ */
@Command(name = "GetStatusTdb") @Command(name = "CreateNewContext", inTypeDesc = "contextName,contextDescription", outTypeDesc = "contextId")
public String[] getStatusTdb(final String[] argin) throws DevFailed { public int createNewContext(final String[] argin) throws DevFailed {
return databaseAccessTDB.getStatus(argin); if (argin.length != 2) {
} throw DevFailedUtils.newDevFailed("Invalid number of arguments");
public void setHdbHost(String hdbHost) {
this.hdbHost = hdbHost;
}
public void setHdbName(String hdbName) {
this.hdbName = hdbName;
}
public void setTdbHost(String tdbHost) {
this.tdbHost = tdbHost;
} }
return databaseAccess.createNewContext(argin[0], argin[1]);
public void setTdbName(String tdbName) {
this.tdbName = tdbName;
}
public void setHdbUser(String hdbUser) {
this.hdbUser = hdbUser;
}
public void setHdbPassword(String hdbPassword) {
this.hdbPassword = hdbPassword;
} }
public void setTdbUser(String tdbUser) { /**
this.tdbUser = tdbUser; * Get all the contexts declared in the database.
} *
* @return the array of contexts
public void setTdbPassword(String tdbPassword) { * @throws DevFailed if you are using HDB or TDB
this.tdbPassword = tdbPassword; */
} @Command(name = "GetAllContexts", outTypeDesc = "Every contexts declared")
public String[] getAllContexts() throws DevFailed {
public void setHdbSchema(String hdbSchema) { return databaseAccess.getAllContexts();
this.hdbSchema = hdbSchema;
}
public void setTdbSchema(String tdbSchema) {
this.tdbSchema = tdbSchema;
} }
} }
...@@ -9,18 +9,14 @@ import fr.soleil.archiving.hdbtdb.api.manager.ArchivingManagerApiRefFactory; ...@@ -9,18 +9,14 @@ import fr.soleil.archiving.hdbtdb.api.manager.ArchivingManagerApiRefFactory;
import fr.soleil.archiving.hdbtdb.api.manager.IArchivingManagerApiRef; import fr.soleil.archiving.hdbtdb.api.manager.IArchivingManagerApiRef;
import fr.soleil.archiving.hdbtdb.api.tools.ArchivingMessConfig; import fr.soleil.archiving.hdbtdb.api.tools.ArchivingMessConfig;
import fr.soleil.archiving.hdbtdb.api.tools.AttributeLightMode; import fr.soleil.archiving.hdbtdb.api.tools.AttributeLightMode;
import fr.soleil.archiving.hdbtdb.api.tools.mode.EventMode; import fr.soleil.archiving.hdbtdb.api.tools.mode.*;
import fr.soleil.archiving.hdbtdb.api.tools.mode.Mode;
import fr.soleil.archiving.hdbtdb.api.tools.mode.ModeAbsolu;
import fr.soleil.archiving.hdbtdb.api.tools.mode.ModeDifference;
import fr.soleil.archiving.hdbtdb.api.tools.mode.ModePeriode;
import fr.soleil.archiving.hdbtdb.api.tools.mode.ModeRelatif;
import fr.soleil.database.connection.AbstractDataBaseConnector; import fr.soleil.database.connection.AbstractDataBaseConnector;
import fr.soleil.database.connection.DataBaseParameters; import fr.soleil.database.connection.DataBaseParameters;
import fr.soleil.tango.archiving.build.DatabaseConnectionConfig; import fr.soleil.tango.archiving.build.DatabaseConnectionConfig;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.tango.archiving.server.manager.configuration.ArchivingStartConfig; import org.tango.archiving.server.manager.configuration.ArchivingStartConfig;
import org.tango.utils.DevFailedUtils;
import java.util.Arrays; import java.util.Arrays;
import java.util.HashSet; import java.util.HashSet;
...@@ -30,7 +26,7 @@ import java.util.Set; ...@@ -30,7 +26,7 @@ import java.util.Set;
public class HDBTDBAccess implements IArchivingAccess { public class HDBTDBAccess implements IArchivingAccess {
private final Logger logger = LoggerFactory.getLogger(HDBTDBAccess.class); private final Logger logger = LoggerFactory.getLogger(HDBTDBAccess.class);
private IArchivingManagerApiRef hdbManager; private IArchivingManagerApiRef dbManager;
@Override @Override
public void connect(final DatabaseConnectionConfig params, boolean isHistoric) throws DevFailed { public void connect(final DatabaseConnectionConfig params, boolean isHistoric) throws DevFailed {
...@@ -52,8 +48,8 @@ public class HDBTDBAccess implements IArchivingAccess { ...@@ -52,8 +48,8 @@ public class HDBTDBAccess implements IArchivingAccess {
legacyParams.setMetricRegistry(params.getMetricRegistry()); legacyParams.setMetricRegistry(params.getMetricRegistry());
} }
final AbstractDataBaseConnector connector = ConnectionFactory.connect(legacyParams); final AbstractDataBaseConnector connector = ConnectionFactory.connect(legacyParams);
hdbManager = ArchivingManagerApiRefFactory.getInstance(isHistoric, connector); dbManager = ArchivingManagerApiRefFactory.getInstance(isHistoric, connector);
hdbManager.archivingConfigure(); dbManager.archivingConfigure();
} catch (ArchivingException e) { } catch (ArchivingException e) {
logger.error("cannot connect to DB", e); logger.error("cannot connect to DB", e);
throw e.toTangoException(); throw e.toTangoException();
...@@ -62,35 +58,36 @@ public class HDBTDBAccess implements IArchivingAccess { ...@@ -62,35 +58,36 @@ public class HDBTDBAccess implements IArchivingAccess {
@Override @Override
public String archivingStop(final String[] argin) throws DevFailed { public String archivingStop(final String[] argin) throws DevFailed {
logger.info("Entering archiving_stop_hdb()"); logger.info("Entering archiving_stop()");
try { try {
hdbManager.archivingStopConf(argin); dbManager.archivingStopConf(argin);
} catch (final ArchivingException e) { } catch (final ArchivingException e) {
logger.warn(e.toString(), e); logger.warn(e.toString(), e);
throw e.toTangoException(); throw e.toTangoException();
} }
logger.info("Exiting archiving_stop()");
return ""; return "";
} }
@Override @Override
public void archivingModif(final String[] argin) throws DevFailed { public void archivingModif(final String[] argin) throws DevFailed {
logger.info("Entering archiving_modif_hdb()"); logger.info("Entering archiving_modif()");
final ArchivingMessConfig archivingMessConfig = ArchivingMessConfig.creationWithoutFullInformation(argin); final ArchivingMessConfig archivingMessConfig = ArchivingMessConfig.creationWithoutFullInformation(argin);
try { try {
hdbManager.archivingStopConf(archivingMessConfig.getAttributeList()); dbManager.archivingStopConf(archivingMessConfig.getAttributeList());
archivingStart(argin); archivingStart(argin);
} catch (final ArchivingException e) { } catch (final ArchivingException e) {
logger.warn(e.toString(), e); logger.warn(e.toString(), e);
throw e.toTangoException(); throw e.toTangoException();
} }
logger.info("Exiting archiving_modif_hdb()"); logger.info("Exiting archiving_modif()");
} }
@Override @Override
public void archivingStart(final String[] argin) throws DevFailed { public void archivingStart(final String[] argin) throws DevFailed {
try { try {
final ArchivingMessConfig archivingMessConfig = ArchivingMessConfig.creationWithoutFullInformation(argin); final ArchivingMessConfig archivingMessConfig = ArchivingMessConfig.creationWithoutFullInformation(argin);
hdbManager.archivingStart(archivingMessConfig); dbManager.archivingStart(archivingMessConfig);
} catch (ArchivingException e) { } catch (ArchivingException e) {
logger.error(e.toString(), e); logger.error(e.toString(), e);
throw e.toTangoException(); throw e.toTangoException();
...@@ -145,7 +142,7 @@ public class HDBTDBAccess implements IArchivingAccess { ...@@ -145,7 +142,7 @@ public class HDBTDBAccess implements IArchivingAccess {
} }
); );
try { try {
hdbManager.archivingStart(archivingMessConfig); dbManager.archivingStart(archivingMessConfig);
} catch (ArchivingException e) { } catch (ArchivingException e) {
logger.error(e.toString(), e); logger.error(e.toString(), e);
throw e.toTangoException(); throw e.toTangoException();
...@@ -154,12 +151,12 @@ public class HDBTDBAccess implements IArchivingAccess { ...@@ -154,12 +151,12 @@ public class HDBTDBAccess implements IArchivingAccess {
@Override @Override
public short[] isArchived(final String[] argin) throws DevFailed { public short[] isArchived(final String[] argin) throws DevFailed {
logger.info("Entering is_archived_hdb()"); logger.info("Entering is_archived()");
short[] argout = new short[argin.length]; short[] argout = new short[argin.length];
boolean result = false; boolean result = false;
for (int i = 0; i < argin.length; i++) { for (int i = 0; i < argin.length; i++) {
try { try {
result = hdbManager.isArchived(argin[i]); result = dbManager.isArchived(argin[i]);
} catch (final ArchivingException e) { } catch (final ArchivingException e) {
logger.warn(e.toString(), e); logger.warn(e.toString(), e);
throw e.toTangoException(); throw e.toTangoException();
...@@ -171,43 +168,53 @@ public class HDBTDBAccess implements IArchivingAccess { ...@@ -171,43 +168,53 @@ public class HDBTDBAccess implements IArchivingAccess {
} }
} }
logger.info("Exiting is_archived_hdb()"); logger.info("Exiting is_archived()");
return argout; return argout;
} }
@Override @Override
public String[] getArchivingMode(final String argin) throws DevFailed { public String[] getArchivingMode(final String argin) throws DevFailed {
logger.info("Entering get_archiving_mode_hdb()"); logger.info("Entering get_archiving_mode()");
String[] argout; String[] argout;
try { try {
final Mode mode = hdbManager.getArchivingMode(argin); final Mode mode = dbManager.getArchivingMode(argin);
argout = mode.toArray(); argout = mode.toArray();
} catch (final ArchivingException e) { } catch (final ArchivingException e) {
logger.error(e.getMessage()); logger.error(e.getMessage());
throw e.toTangoException(); throw e.toTangoException();
} }
logger.info("Exiting get_archiving_mode_hdb()"); logger.info("Exiting get_archiving_mode()");
return argout; return argout;
} }
@Override @Override
public String[] getStatus(final String[] argin) throws DevFailed { public String[] getStatus(final String[] argin) throws DevFailed {
logger.info("Entering get_status_hdb()"); logger.info("Entering get_status()");
String[] argout = new String[argin.length]; String[] argout = new String[argin.length];
for (int i = 0; i < argin.length; i++) { for (int i = 0; i < argin.length; i++) {
try { try {
argout[i] = hdbManager.getStatus(argin[i]); argout[i] = dbManager.getStatus(argin[i]);
} catch (final ArchivingException e) { } catch (final ArchivingException e) {
throw e.toTangoException(); throw e.toTangoException();
} }
} }
logger.info("Exiting get_status_hdb()"); logger.info("Exiting get_status()");
return argout; return argout;
} }
@Override @Override
public Set<String> getExportedArchiverList() { public Set<String> getExportedArchiverList() {
return new HashSet<>(Arrays.asList(hdbManager.getMExportedArchiverList())); return new HashSet<>(Arrays.asList(dbManager.getMExportedArchiverList()));
}
@Override
public String[] getAllContexts() throws DevFailed {
throw DevFailedUtils.newDevFailed("Not supported for HDB or TDB");
}
@Override
public int createNewContext(final String contextName, String description) throws DevFailed {
throw DevFailedUtils.newDevFailed("Not supported for HDB or TDB");
} }
} }
...@@ -24,7 +24,6 @@ public interface IArchivingAccess { ...@@ -24,7 +24,6 @@ public interface IArchivingAccess {
short[] isArchived(final String[] argin) throws DevFailed; short[] isArchived(final String[] argin) throws DevFailed;
String[] getArchivingMode(final String argin) throws DevFailed; String[] getArchivingMode(final String argin) throws DevFailed;
...@@ -32,4 +31,7 @@ public interface IArchivingAccess { ...@@ -32,4 +31,7 @@ public interface IArchivingAccess {
Set<String> getExportedArchiverList(); Set<String> getExportedArchiverList();
String[] getAllContexts() throws DevFailed;
int createNewContext(final String contextName, String description) throws DevFailed;
} }
...@@ -5,12 +5,12 @@ import com.fasterxml.jackson.databind.ObjectMapper; ...@@ -5,12 +5,12 @@ import com.fasterxml.jackson.databind.ObjectMapper;
import fr.esrf.Tango.DevFailed; import fr.esrf.Tango.DevFailed;
import fr.esrf.TangoApi.AttributeInfo; import fr.esrf.TangoApi.AttributeInfo;
import fr.esrf.TangoApi.DeviceProxy; import fr.esrf.TangoApi.DeviceProxy;
import fr.soleil.database.connection.DataBaseParameters;
import fr.soleil.tango.archiving.TangoArchivingSystemConfigurationBuilder; import fr.soleil.tango.archiving.TangoArchivingSystemConfigurationBuilder;
import fr.soleil.tango.archiving.TangoArchivingSystemConfigurationService; import fr.soleil.tango.archiving.TangoArchivingSystemConfigurationService;
import fr.soleil.tango.archiving.build.DatabaseConnectionConfig; import fr.soleil.tango.archiving.build.DatabaseConnectionConfig;
import fr.soleil.tango.archiving.build.TangoArchivingServicesBuilder; import fr.soleil.tango.archiving.build.TangoArchivingServicesBuilder;
import fr.soleil.tango.archiving.config.AttributeConfig; import fr.soleil.tango.archiving.config.AttributeConfig;
import fr.soleil.tango.archiving.config.InsertionModes;
import fr.soleil.tango.archiving.infra.tango.ArchivingConfig; import fr.soleil.tango.archiving.infra.tango.ArchivingConfig;
import fr.soleil.tango.archiving.infra.tango.ArchivingConfigs; import fr.soleil.tango.archiving.infra.tango.ArchivingConfigs;
import fr.soleil.tango.archiving.infra.tango.TangoArchiverProperties; import fr.soleil.tango.archiving.infra.tango.TangoArchiverProperties;
...@@ -22,12 +22,7 @@ import org.tango.archiving.server.manager.configuration.ArchivingStartConfig; ...@@ -22,12 +22,7 @@ import org.tango.archiving.server.manager.configuration.ArchivingStartConfig;
import org.tango.archiving.server.manager.configuration.InsertionModesMapper; import org.tango.archiving.server.manager.configuration.InsertionModesMapper;
import org.tango.utils.DevFailedUtils; import org.tango.utils.DevFailedUtils;
import java.util.ArrayList; import java.util.*;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.OptionalInt;
import java.util.Set;
public class TimeseriesAccess implements IArchivingAccess { public class TimeseriesAccess implements IArchivingAccess {
...@@ -40,7 +35,7 @@ public class TimeseriesAccess implements IArchivingAccess { ...@@ -40,7 +35,7 @@ public class TimeseriesAccess implements IArchivingAccess {
private final static String IMAGE_CHARGE = "imageCharge"; private final static String IMAGE_CHARGE = "imageCharge";
private final static String INSERTION_RATE = "insertionRate"; private final static String INSERTION_RATE = "insertionRate";
protected TangoArchivingConfigService configService; protected TangoArchivingConfigService configService;
private Logger logger = LoggerFactory.getLogger(TimeseriesAccess.class); private final Logger logger = LoggerFactory.getLogger(TimeseriesAccess.class);
private TangoArchivingSystemConfigurationService service; private TangoArchivingSystemConfigurationService service;
@Override @Override
...@@ -132,20 +127,42 @@ public class TimeseriesAccess implements IArchivingAccess { ...@@ -132,20 +127,42 @@ public class TimeseriesAccess implements IArchivingAccess {
return toStringArray(configService.getCurrentInsertionModes(id.getAsInt())); return toStringArray(configService.getCurrentInsertionModes(id.getAsInt()));
} }
private String[] toStringArray(Object toConvert) { private String[] toStringArray(Optional<InsertionModes> toConvert) {
List<String> array = new ArrayList<>(); List<String> array = new ArrayList<>();
Arrays.stream(toConvert.getClass().getDeclaredFields()) if (toConvert.isPresent()) {
.forEach(f -> { InsertionModes modes = toConvert.get();
try { if (modes.isPeriodic()) {
f.setAccessible(true); array.add("MODE_P");
Object value = f.get(toConvert); array.add(String.valueOf(modes.getPeriodPeriodic()));
if (value != null) { }
array.add(f.getName() + ": " + f.get(toConvert)); if (modes.isAbsolute()) {
array.add("MODE_A");
array.add(String.valueOf(modes.getPeriodAbsolute()));
array.add(modes.getDecreaseDeltaAbsolute().toString());
array.add(modes.getIncreaseDeltaAbsolute().toString());
array.add(String.valueOf(modes.isSlowDriftAbsolute()));
}
if (modes.isRelative()) {
array.add("MODE_R");
array.add(String.valueOf(modes.getPeriodRelative()));
array.add(modes.getDecreasePercentRelative().toString());
array.add(modes.getIncreasePercentRelative().toString());
array.add(String.valueOf(modes.isSlowDriftRelative()));
}
if (modes.isThreshold()) {
array.add("MODE_T");
array.add(String.valueOf(modes.getPeriodThreshold()));
array.add(modes.getMinThresholdValue().toString());
array.add(modes.getMaxThresholdValue().toString());
}
if (modes.isDifference()) {
array.add("MODE_D");
array.add(String.valueOf(modes.getPeriodDifference()));
}
if (modes.isEvent()) {
array.add("MODE_EVT");
} }
} catch (IllegalAccessException e) {
array.add(f.getName() + ": error");
} }
});
return array.toArray(new String[0]); return array.toArray(new String[0]);
} }
...@@ -158,4 +175,14 @@ public class TimeseriesAccess implements IArchivingAccess { ...@@ -158,4 +175,14 @@ public class TimeseriesAccess implements IArchivingAccess {
public Set<String> getExportedArchiverList() { public Set<String> getExportedArchiverList() {
return service.getArchivers(); return service.getArchivers();
} }
@Override
public String[] getAllContexts() throws DevFailed {
return new String[0]; // TODO: Implement
}
@Override
public int createNewContext(final String contextName, String description) throws DevFailed {
return 0; // TODO: Implement
}
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment