Skip to content
Snippets Groups Projects
Commit 83ae355b authored by gwen-soleil's avatar gwen-soleil
Browse files

add support for new timeseries

parent a572f1ed
No related branches found
No related tags found
No related merge requests found
package org.tango.archiving.server.manager;
import fr.esrf.Tango.DevFailed;
import fr.soleil.archiving.common.api.ConnectionFactory;
import fr.soleil.archiving.common.api.exception.ArchivingException;
import fr.soleil.archiving.hdbtdb.api.ConfigConst;
import fr.soleil.archiving.hdbtdb.api.manager.ArchivingManagerApiRefFactory;
import fr.soleil.archiving.hdbtdb.api.manager.IArchivingManagerApiRef;
import fr.soleil.archiving.hdbtdb.api.tools.ArchivingMessConfig;
import fr.soleil.archiving.hdbtdb.api.tools.mode.Mode;
import fr.soleil.database.connection.AbstractDataBaseConnector;
import fr.soleil.database.connection.DataBaseParameters;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.tango.DeviceState;
import org.tango.server.ServerManager;
import org.tango.server.annotation.Attribute;
......@@ -23,6 +14,7 @@ import org.tango.server.annotation.State;
import org.tango.server.annotation.Status;
import java.util.Arrays;
import java.util.Objects;
import java.util.ResourceBundle;
/**
......@@ -86,10 +78,11 @@ import java.util.ResourceBundle;
@Device
public class ArchivingManager {
public static final boolean IS_HDB_TIMESERIES = System.getProperty("fr.soleil.tango.archiving.hdb.timeseries") != null
&& Objects.equals(System.getProperty("fr.soleil.tango.archiving.hdb.timeseries"), "true");
public static final boolean IS_TDB_TIMESERIES = System.getProperty("fr.soleil.tango.archiving.tdb.timeseries") != null
&& Objects.equals(System.getProperty("fr.soleil.tango.archiving.tdb.timeseries"), "true");
private static String VERSION;
private Logger logger = LoggerFactory.getLogger(ArchivingManager.class);
private IArchivingManagerApiRef hdbManager;
private IArchivingManagerApiRef tdbManager;
/**
* Computer identifier on wich is settled the database DB. The identifier
* can be the computer name or its IP address. <br>
......@@ -153,6 +146,8 @@ public class ArchivingManager {
private DeviceState state;
@Status
private String status;
private IArchivingAccess databaseAccessHDB;
private IArchivingAccess databaseAccessTDB;
public static void main(final String[] args) {
VERSION = ResourceBundle.getBundle("application").getString("project.version");
......@@ -172,6 +167,34 @@ public class ArchivingManager {
this.state = state;
}
@Init(lazyLoading = true)
public void init() {
connect();
}
private void connect() {
StringBuilder statusBuilder = new StringBuilder();
try {
connectHdb();
statusBuilder.append("- HDB Archivers: ")
.append(Arrays.toString(databaseAccessHDB.getMExportedArchiverList()))
.append("\n");
} catch (Throwable e) {
statusBuilder.append("- HDB is not available").append("\n");
}
try {
connectTdb();
statusBuilder.append("- TDB Archivers: ")
.append(Arrays.toString(databaseAccessTDB.getMExportedArchiverList()))
.append("\n");
} catch (Throwable e) {
e.printStackTrace();
statusBuilder.append("- TDB is not available").append("\n");
}
state = DeviceState.ON;
status = statusBuilder.toString();
}
private void connectHdb() throws DevFailed {
final DataBaseParameters params = new DataBaseParameters();
......@@ -187,12 +210,12 @@ public class ArchivingManager {
params.setName(hdbName);
if (!hdbSchema.isEmpty())
params.setSchema(hdbSchema);
try {
final AbstractDataBaseConnector hdbConnector = ConnectionFactory.connect(params);
hdbManager = ArchivingManagerApiRefFactory.getInstance(true, hdbConnector);
hdbManager.archivingConfigure();
} catch (ArchivingException e) {
throw e.toTangoException();
if (!IS_HDB_TIMESERIES) {
databaseAccessHDB = new HDBTDBAccess();
databaseAccessHDB.connect(params, true);
} else {
databaseAccessHDB = new TimeseriesAccess();
databaseAccessHDB.connect(params, true);
}
}
......@@ -209,40 +232,13 @@ public class ArchivingManager {
params.setName(tdbName);
if (!tdbSchema.isEmpty())
params.setSchema(tdbSchema);
try {
final AbstractDataBaseConnector connector = ConnectionFactory.connect(params);
tdbManager = ArchivingManagerApiRefFactory.getInstance(false, connector);
tdbManager.archivingConfigure();
} catch (ArchivingException e) {
throw e.toTangoException();
}
}
private void connect() {
StringBuilder statusBuilder = new StringBuilder();
try {
connectHdb();
statusBuilder.append("- HDB Archivers: ")
.append(Arrays.toString(hdbManager.getMExportedArchiverList()))
.append("\n");
} catch (Throwable e) {
statusBuilder.append("- HDB is not available").append("\n");
}
try {
connectTdb();
statusBuilder.append("- TDB Archivers: ")
.append(Arrays.toString(tdbManager.getMExportedArchiverList()))
.append("\n");
} catch (Throwable e) {
statusBuilder.append("- TDB is not available").append("\n");
}
state = DeviceState.ON;
status = statusBuilder.toString();
if (!IS_TDB_TIMESERIES) {
databaseAccessTDB = new HDBTDBAccess();
databaseAccessTDB.connect(params, false);
} else {
databaseAccessTDB = new TimeseriesAccess();
databaseAccessTDB.connect(params, false);
}
@Init(lazyLoading = true)
public void init() {
connect();
}
public String getStatus() {
......@@ -254,16 +250,38 @@ public class ArchivingManager {
}
/**
* Execute command "ArchivingStartHdb" on device. Start an historical
* archiving for the specified attributes, and following the specified mode.
* Execute command "ArchivingStopHdb" on device. Stops the historical
* archiving for the given attributes.
*
* @param argin Archiving arguments... <BR>
* @param argin The attribute list.
*/
@Command(name = "ArchivingStopHdb", inTypeDesc = "The attribute list")
public void archivingStopHdb(final String[] argin) throws DevFailed {
databaseAccessHDB.archivingStop(argin);
}
/**
* Execute command "ArchivingStopTdb" on device. Stops the temporary
* archiving for the given attributes.
*
* @param argin The attribute list.
*/
@Command(name = "ArchivingStopTdb")
public void archivingStopTdb(final String[] argin) throws DevFailed {
databaseAccessTDB.archivingStop(argin);
}
/**
* Execute command "ArchivingModifHdb" on device. Change the mode of an
* historical 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 HdbArchiver device, <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
......@@ -314,28 +332,13 @@ public class ArchivingManager {
* </blockquote>
* @see fr.soleil.archiving.hdbtdb.api.tools.ArchivingMessConfig
*/
@Command(name = "ArchivingStartHdb")
public void archivingStartHdb(final String[] argin) throws DevFailed {
logger.info("Entering archiving_start_hdb()");
if (hdbManager == null) {
connectHdb();
}
if (hdbManager != null) {
try {
final ArchivingMessConfig archivingMessConfig = ArchivingMessConfig
.creationWithoutFullInformation(argin);
hdbManager.archivingStart(archivingMessConfig);
} catch (ArchivingException e) {
e.printStackTrace();
logger.warn(e.toString(), e);
throw e.toTangoException();
}
}
logger.info("Exiting archiving_start_hdb()");
@Command(name = "ArchivingModifHdb")
public void archivingModifHdb(final String[] argin) throws DevFailed {
databaseAccessHDB.archivingModif(argin);
}
/**
* Execute command "ArchivingStartTdb" on device. Start an temporary
* Execute command "ArchivingStartHdb" on device. Start an historical
* archiving for the specified attributes, and following the specified mode.
*
* @param argin Archiving arguments... <BR>
......@@ -390,79 +393,21 @@ public class ArchivingManager {
* <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 {
logger.info("Entering archiving_start_tdb()");
if (tdbManager == null) {
connectTdb();
}
final ArchivingMessConfig archivingMessConfig = ArchivingMessConfig
.creationWithoutFullInformation(argin);
try {
tdbManager.archivingStart(archivingMessConfig);
} catch (final ArchivingException e) {
logger.warn(e.toString(), e);
throw e.toTangoException();
}
logger.info("Exiting archiving_start_tdb()");
}
/**
* Execute command "ArchivingStopHdb" on device. Stops the historical
* archiving for the given attributes.
*
* @param argin The attribute list.
*/
@Command(name = "ArchivingStopHdb", inTypeDesc = "The attribute list")
public void archivingStopHdb(final String[] argin) throws DevFailed {
logger.info("Entering archiving_stop_hdb()");
if (hdbManager == null) {
connectHdb();
}
try {
hdbManager.archivingStopConf(argin);
} catch (final ArchivingException e) {
logger.warn(e.toString(), e);
throw e.toTangoException();
}
}
/**
* Execute command "ArchivingStopTdb" on device. Stops the temporary
* archiving for the given attributes.
*
* @param argin The attribute list.
*/
@Command(name = "ArchivingStopTdb")
public void archivingStopTdb(final String[] argin) throws DevFailed {
logger.info("Entering archiving_stop_tdb()");
if (tdbManager == null) {
connectTdb();
}
try {
tdbManager.archivingStopConf(argin);
} catch (final ArchivingException e) {
logger.warn(e.toString(), e);
throw e.toTangoException();
}
logger.info("Exiting archiving_stop_tdb()");
@Command(name = "ArchivingStartHdb")
public void archivingStartHdb(final String[] argin) throws DevFailed {
databaseAccessHDB.archivingStart(argin);
}
/**
* Execute command "ArchivingModifHdb" on device. Change the mode of an
* historical archiving.
* Execute command "ArchivingModifTdb" on device. Change the mode of a
* temporary archiving.
*
* @param argin The configuration to switch to... <br>
* @param argin The configuration to switch to...... <br>
* <blockquote>
* <ul>
* <li><strong>The first part :</strong>
......@@ -514,40 +459,32 @@ public class ArchivingManager {
* <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 = "ArchivingModifHdb")
public void archivingModifHdb(final String[] argin) throws DevFailed {
logger.info("Entering archiving_modif_hdb()");
if (hdbManager == null) {
connectHdb();
}
final ArchivingMessConfig archivingMessConfig = ArchivingMessConfig
.creationWithoutFullInformation(argin);
try {
hdbManager.archivingStopConf(archivingMessConfig.getAttributeList());
archivingStartHdb(argin);
} catch (final ArchivingException e) {
logger.warn(e.toString(), e);
throw e.toTangoException();
}
logger.info("Exiting archiving_modif_hdb()");
@Command(name = "ArchivingModifTdb")
public void archivingModifTdb(final String[] argin) throws DevFailed {
databaseAccessTDB.archivingModif(argin);
}
/**
* Execute command "ArchivingModifTdb" on device. Change the mode of a
* temporary archiving.
* Execute command "ArchivingStartTdb" on device. Start an temporary
* archiving for the specified attributes, and following the specified mode.
*
* @param argin The configuration to switch to...... <br>
* @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 TdbArchiver device, <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
......@@ -603,22 +540,9 @@ public class ArchivingManager {
* </blockquote>
* @see fr.soleil.archiving.hdbtdb.api.tools.ArchivingMessConfig
*/
@Command(name = "ArchivingModifTdb")
public void archivingModifTdb(final String[] argin) throws DevFailed {
logger.info("Entering archiving_modif_tdb()");
if (tdbManager == null) {
connectTdb();
}
final ArchivingMessConfig archivingMessConfig = ArchivingMessConfig
.creationWithoutFullInformation(argin);
try {
tdbManager.archivingStopConf(archivingMessConfig.getAttributeList());
archivingStartTdb(argin);
} catch (final ArchivingException e) {
logger.warn(e.toString(), e);
throw e.toTangoException();
}
logger.info("Exiting archiving_modif_tdb()");
@Command(name = "ArchivingStartTdb")
public void archivingStartTdb(final String[] argin) throws DevFailed {
databaseAccessTDB.archivingStart(argin);
}
/**
......@@ -634,29 +558,7 @@ public class ArchivingManager {
*/
@Command(name = "IsArchivedHdb")
public short[] isArchivedHdb(final String[] argin) throws DevFailed {
logger.info("Entering is_archived_hdb()");
if (hdbManager == null) {
connectHdb();
}
short[] argout = new short[argin.length];
boolean result = false;
for (int i = 0; i < argin.length; i++) {
try {
result = hdbManager.isArchived(argin[i]);
} catch (final ArchivingException e) {
logger.warn(e.toString(), e);
throw e.toTangoException();
}
if (result) {
argout[i] = 1;
} else {
argout[i] = 0;
}
}
logger.info("Exiting is_archived_hdb()");
return argout;
return databaseAccessHDB.isArchived(argin);
}
/**
......@@ -672,27 +574,7 @@ public class ArchivingManager {
*/
@Command(name = "IsArchivedTdb")
public short[] isArchivedTdb(final String[] argin) throws DevFailed {
logger.info("Entering is_archived_tdb()");
short[] argout = new short[argin.length];
if (tdbManager == null) {
connectTdb();
}
boolean result = false;
for (int i = 0; i < argin.length; i++) {
try {
result = tdbManager.isArchived(argin[i]);
} catch (final ArchivingException e) {
logger.warn(e.toString(), e);
throw e.toTangoException();
}
if (result) {
argout[i] = 1;
} else {
argout[i] = 0;
}
}
logger.info("Exiting is_archived_tdb()");
return argout;
return databaseAccessTDB.isArchived(argin);
}
/**
......@@ -746,20 +628,7 @@ public class ArchivingManager {
*/
@Command(name = "GetArchivingModeHdb")
public String[] getArchivingModeHdb(final String argin) throws DevFailed {
logger.info("Entering get_archiving_mode_hdb()");
if (hdbManager == null) {
connectHdb();
}
String[] argout;
try {
final Mode mode = hdbManager.getArchivingMode(argin);
argout = mode.toArray();
} catch (final ArchivingException e) {
logger.error(e.getMessage());
throw e.toTangoException();
}
logger.info("Exiting get_archiving_mode_hdb()");
return argout;
return databaseAccessHDB.getArchivingMode(argin);
}
/**
......@@ -818,21 +687,7 @@ public class ArchivingManager {
*/
@Command(name = "GetArchivingModeTdb")
public String[] getArchivingModeTdb(final String argin) throws DevFailed {
logger.info("Entering get_archiving_mode_tdb()");
String[] argout;
if (tdbManager == null) {
connectTdb();
}
try {
final Mode mode = tdbManager.getArchivingMode(argin);
argout = mode.toArray();
} catch (final ArchivingException e) {
logger.error(e.getMessage());
throw e.toTangoException();
}
logger.info("Exiting get_archiving_mode_tdb()");
return argout;
return databaseAccessTDB.getArchivingMode(argin);
}
/**
......@@ -844,21 +699,7 @@ public class ArchivingManager {
*/
@Command(name = "GetStatusHdb")
public String[] getStatusHdb(final String[] argin) throws DevFailed {
logger.info("Entering get_status_hdb()");
if (hdbManager == null) {
connectHdb();
}
String[] argout = new String[argin.length];
for (int i = 0; i < argin.length; i++) {
try {
argout[i] = hdbManager.getStatus(argin[i]);
} catch (final ArchivingException e) {
throw e.toTangoException();
}
}
logger.info("Exiting get_status_hdb()");
return argout;
return databaseAccessHDB.getStatus(argin);
}
/**
......@@ -870,20 +711,7 @@ public class ArchivingManager {
*/
@Command(name = "GetStatusTdb")
public String[] getStatusTdb(final String[] argin) throws DevFailed {
logger.info("Entering get_status_tdb()");
String[] argout = new String[argin.length];
if (tdbManager == null) {
connectTdb();
}
for (int i = 0; i < argin.length; i++) {
try {
argout[i] = tdbManager.getStatus(argin[i]);
} catch (final ArchivingException e) {
throw e.toTangoException();
}
}
logger.info("Exiting get_status_tdb()");
return argout;
return databaseAccessTDB.getStatus(argin);
}
public void setHdbHost(String hdbHost) {
......
package org.tango.archiving.server.manager;
import fr.esrf.Tango.DevFailed;
import fr.soleil.archiving.common.api.ConnectionFactory;
import fr.soleil.archiving.common.api.exception.ArchivingException;
import fr.soleil.archiving.hdbtdb.api.manager.ArchivingManagerApiRefFactory;
import fr.soleil.archiving.hdbtdb.api.manager.IArchivingManagerApiRef;
import fr.soleil.archiving.hdbtdb.api.tools.ArchivingMessConfig;
import fr.soleil.archiving.hdbtdb.api.tools.mode.Mode;
import fr.soleil.database.connection.AbstractDataBaseConnector;
import fr.soleil.database.connection.DataBaseParameters;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.tango.server.annotation.Command;
public class HDBTDBAccess implements IArchivingAccess{
private final Logger logger = LoggerFactory.getLogger(HDBTDBAccess.class);
private IArchivingManagerApiRef hdbManager;
@Override
public void connect(final DataBaseParameters params, boolean isHistoric) throws DevFailed {
try {
logger.info("connecting to {}", params);
final AbstractDataBaseConnector connector = ConnectionFactory.connect(params);
hdbManager = ArchivingManagerApiRefFactory.getInstance(isHistoric, connector);
hdbManager.archivingConfigure();
} catch (ArchivingException e) {
logger.error("cannot connect to DB",e);
throw e.toTangoException();
}
}
@Override
public void archivingStop(final String[] argin) throws DevFailed {
logger.info("Entering archiving_stop_hdb()");
try {
hdbManager.archivingStopConf(argin);
} catch (final ArchivingException e) {
logger.warn(e.toString(), e);
throw e.toTangoException();
}
}
@Override
public void archivingModif(final String[] argin) throws DevFailed {
logger.info("Entering archiving_modif_hdb()");
final ArchivingMessConfig archivingMessConfig = ArchivingMessConfig
.creationWithoutFullInformation(argin);
try {
hdbManager.archivingStopConf(archivingMessConfig.getAttributeList());
archivingStart(argin);
} catch (final ArchivingException e) {
logger.warn(e.toString(), e);
throw e.toTangoException();
}
logger.info("Exiting archiving_modif_hdb()");
}
@Override
public void archivingStart(final String[] argin) throws DevFailed {
logger.info("Entering archiving_start_hdb()");
try {
final ArchivingMessConfig archivingMessConfig = ArchivingMessConfig
.creationWithoutFullInformation(argin);
hdbManager.archivingStart(archivingMessConfig);
} catch (ArchivingException e) {
e.printStackTrace();
logger.warn(e.toString(), e);
throw e.toTangoException();
}
logger.info("Exiting archiving_start_hdb()");
}
@Override
public short[] isArchived(final String[] argin) throws DevFailed {
logger.info("Entering is_archived_hdb()");
short[] argout = new short[argin.length];
boolean result = false;
for (int i = 0; i < argin.length; i++) {
try {
result = hdbManager.isArchived(argin[i]);
} catch (final ArchivingException e) {
logger.warn(e.toString(), e);
throw e.toTangoException();
}
if (result) {
argout[i] = 1;
} else {
argout[i] = 0;
}
}
logger.info("Exiting is_archived_hdb()");
return argout;
}
@Override
public String[] getArchivingMode(final String argin) throws DevFailed {
logger.info("Entering get_archiving_mode_hdb()");
String[] argout;
try {
final Mode mode = hdbManager.getArchivingMode(argin);
argout = mode.toArray();
} catch (final ArchivingException e) {
logger.error(e.getMessage());
throw e.toTangoException();
}
logger.info("Exiting get_archiving_mode_hdb()");
return argout;
}
@Override
public String[] getStatus(final String[] argin) throws DevFailed {
logger.info("Entering get_status_hdb()");
String[] argout = new String[argin.length];
for (int i = 0; i < argin.length; i++) {
try {
argout[i] = hdbManager.getStatus(argin[i]);
} catch (final ArchivingException e) {
throw e.toTangoException();
}
}
logger.info("Exiting get_status_hdb()");
return argout;
}
@Override
public String[] getMExportedArchiverList() {
return hdbManager.getMExportedArchiverList();
}
}
package org.tango.archiving.server.manager;
import fr.esrf.Tango.DevFailed;
import fr.soleil.database.connection.DataBaseParameters;
public interface IArchivingAccess {
void connect(final DataBaseParameters params, boolean isHistoric) throws DevFailed;
void archivingStop(final String[] argin) throws DevFailed;
void archivingModif(final String[] argin) throws DevFailed;
void archivingStart(final String[] argin) throws DevFailed;
short[] isArchived(final String[] argin) throws DevFailed;
String[] getArchivingMode(final String argin) throws DevFailed;
String[] getStatus(final String[] argin) throws DevFailed;
String[] getMExportedArchiverList();
}
package org.tango.archiving.server.manager;
import com.zaxxer.hikari.HikariConfig;
import fr.esrf.Tango.DevFailed;
import fr.soleil.database.connection.DataBaseParameters;
import fr.soleil.tango.archiving.TangoArchivingConfigService;
import fr.soleil.tango.archiving.TangoArchivingServicesBuilder;
import fr.soleil.tango.archiving.TangoArchivingSystemConfigurationBuilder;
import fr.soleil.tango.archiving.TangoArchivingSystemConfigurationService;
import fr.soleil.tango.archiving.infra.tango.ArchivingConfigs;
import fr.soleil.tango.archiving.infra.tango.TangoArchiverProperties;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.tango.utils.DevFailedUtils;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.OptionalInt;
public class TimeseriesAccess implements IArchivingAccess {
private final static String IS_DEDICATED = "IsDedicated";
private final static String RESERVED_ATTRIBUTES = "ReservedAttributes";
private final static String STOP_ARCHIVE_CONF = "StopArchiveConf";
private final static String TRIGGER_ARCHIVE_CONF = "TriggerArchiveConf";
private final static String SCALAR_CHARGE = "scalarCharge";
private final static String SPECTRUM_CHARGE = "spectrumCharge";
private final static String IMAGE_CHARGE = "imageCharge";
private final static String INSERTION_RATE = "insertionRate";
protected TangoArchivingConfigService configService;
private Logger logger = LoggerFactory.getLogger(TimeseriesAccess.class);
private TangoArchivingSystemConfigurationService service;
@Override
public void connect(final DataBaseParameters params, final boolean isHistoric) throws DevFailed {
HikariConfig config = new HikariConfig();
config.setJdbcUrl("jdbc:postgresql://" + params.getHost() + ":5432/" + params.getName());
config.setUsername(params.getUser());
config.setPassword(params.getPassword());
config.setPoolName("timescale-pool");
TangoArchiverProperties properties = new TangoArchiverProperties();
if (isHistoric) {
properties.setArchiverClassName("HdbArchiver");
} else {
properties.setArchiverClassName("TdbArchiver");
}
properties.setIsDedicatedProperty(IS_DEDICATED);
properties.setReservedAttributesProperty(RESERVED_ATTRIBUTES);
properties.setImageLoadAttributeName(IMAGE_CHARGE);
properties.setSpectrumLoadAttributeName(SPECTRUM_CHARGE);
properties.setScalarLoadAttributeName(SCALAR_CHARGE);
properties.setStartArchivingCommandName(TRIGGER_ARCHIVE_CONF);
properties.setInsertionRateAttributeName(INSERTION_RATE);
properties.setStopArchivingCommandName(STOP_ARCHIVE_CONF);
logger.debug("connecting to {}", ToStringBuilder.reflectionToString(config));
service = new TangoArchivingSystemConfigurationBuilder().build(config, properties);
service.updateArchiversList();
configService = new TangoArchivingServicesBuilder().buildConfigFetcher(config);
}
@Override
public void archivingStop(final String[] argin) throws DevFailed {
logger.info("stopping archiving of {}", Arrays.toString(argin));
final Map<String, List<String>> result = service.stopArchiving(argin);
logger.info("stopping result is {}", result);
}
@Override
public void archivingModif(final String[] argin) throws DevFailed {
archivingStop(argin);
archivingStart(argin);
}
@Override
public void archivingStart(final String[] argin) throws DevFailed {
logger.info("starting archiving of {}", Arrays.toString(argin));
final Map<String, ArchivingConfigs> result = service.startArchiving(new ArchivingConfigs(argin, false));
logger.info("starting result is {}", result);
}
@Override
public short[] isArchived(final String[] argin) throws DevFailed {
short[] result = new short[argin.length];
for (int i = 0; i < result.length; i++) {
if (configService.isArchived(argin[i]))
result[i] = 1;
else
result[i] = 0;
}
return result;
}
@Override
public String[] getArchivingMode(final String argin) throws DevFailed {
OptionalInt id = configService.getAttributeID(argin);
if (!id.isPresent()) {
throw DevFailedUtils.newDevFailed("no id found for " + argin);
}
return toStringArray(configService.getCurrentInsertionModes(id.getAsInt()));
}
private String[] toStringArray(Object toConvert) {
List<String> array = new ArrayList<>();
Arrays.stream(toConvert.getClass().getDeclaredFields())
.forEach(f -> {
try {
f.setAccessible(true);
Object value = f.get(toConvert);
if (value != null) {
array.add(f.getName() + ": " + f.get(toConvert));
}
} catch (IllegalAccessException e) {
array.add(f.getName() + ": error");
}
});
return array.toArray(new String[0]);
}
@Override
public String[] getStatus(final String[] argin) throws DevFailed {
throw DevFailedUtils.newDevFailed("not supported function");
}
@Override
public String[] getMExportedArchiverList() {
return service.getArchivers().toArray(new String[0]);
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment