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

Merge branch 'arnaud_work' into 'master'

Arnaud work

See merge request synchrotron-soleil/control-system/web/tangoarchivinggraphqlextractor!2
parents f2c6f4f4 597d81a4
No related branches found
No related tags found
No related merge requests found
...@@ -206,8 +206,14 @@ public class ArchivingApiDAO { ...@@ -206,8 +206,14 @@ public class ArchivingApiDAO {
.getAttDataAvgBetweenDates(new String[] { attributeCompleteName, startDate, endDate }); .getAttDataAvgBetweenDates(new String[] { attributeCompleteName, startDate, endDate });
AttributeValues attributeAvgValue = new AttributeValues(); AttributeValues attributeAvgValue = new AttributeValues();
attributeAvgValue.setName(attributeCompleteName); attributeAvgValue.setName(attributeCompleteName);
TangoWriteType writable = this.getAttributeWriteType(attributeCompleteName);
if (writable == TangoWriteType.READ || writable == TangoWriteType.READ_WRITE) {
attributeAvgValue.setRead(avgValue); attributeAvgValue.setRead(avgValue);
}
if (writable == TangoWriteType.WRITE) {
attributeAvgValue.setWrite(avgValue); attributeAvgValue.setWrite(avgValue);
}
return attributeAvgValue; return attributeAvgValue;
} }
......
...@@ -19,7 +19,7 @@ import fr.soleil.archiving.hdbtdb.api.management.attributes.adtapt.tableselector ...@@ -19,7 +19,7 @@ import fr.soleil.archiving.hdbtdb.api.management.attributes.adtapt.tableselector
@ActiveProfiles({ "test" }) @ActiveProfiles({ "test" })
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@RunWith(SpringRunner.class) @RunWith(SpringRunner.class)
public class AbstractTest { public abstract class AbstractTest {
public static String ALL = "*"; public static String ALL = "*";
public static String DOMAIN1 = "Domain1"; public static String DOMAIN1 = "Domain1";
......
package fr.soleil.archiving.datafetch.graphql.domain.values;
import static org.junit.Assert.assertArrayEquals;
import java.util.Arrays;
import org.apache.commons.lang3.ArrayUtils;
import org.junit.Test;
import fr.esrf.Tango.AttrDataFormat;
import fr.esrf.Tango.AttrWriteType;
import fr.esrf.Tango.DevState;
import fr.esrf.TangoDs.TangoConst;
import fr.soleil.archiving.common.api.tools.DbData;
import fr.soleil.archiving.common.api.tools.NullableTimedData;
import fr.soleil.archiving.datafetch.graphql.domain.AttributeValues;
public class DbDataMapperTest {
private static final String ATTRIBUTE_NAME = "";
@Test
public void mapScalarDevStateTest() {
int read = 0;
int write = 1;
int[] value = { read, write };
int[] valueRO = { read };
int[] valueWO = { write };
String[] expectedRead = { DevState.from_int(read).toString() };
String[] expectedWrite = { DevState.from_int(write).toString() };
String[] defaultValue = { null };
NullableTimedData timedData = new NullableTimedData();
timedData.setDataType(TangoConst.Tango_DEV_STATE);
timedData.setValue(value, null);
NullableTimedData[] timedDataArray = { timedData };
DbData data = new DbData(ATTRIBUTE_NAME);
data.setDataType(TangoConst.Tango_DEV_STATE);
data.setDataFormat(AttrDataFormat._SCALAR);
data.setTimedData(timedDataArray);
testMapping(expectedRead, expectedWrite, data, valueRO, valueWO, defaultValue);
}
@Test
public void mapSpectrumDevStateTest() {
int[] read = { 0, 1 };
int[] write = { 1, 0 };
int[] value = ArrayUtils.addAll(read, write);
int[] valueRO = read;
int[] valueWO = write;
String[][] expectedRead = {
Arrays.stream(read).mapToObj(i -> DevState.from_int(i).toString()).toArray(String[]::new) };
String[][] expectedWrite = {
Arrays.stream(write).mapToObj(i -> DevState.from_int(i).toString()).toArray(String[]::new) };
String[][] defaultValue = { null };
NullableTimedData timedData = new NullableTimedData();
timedData.setDataType(TangoConst.Tango_DEV_STATE);
timedData.setValue(value, null);
timedData.setX(2);
NullableTimedData[] timedDataArray = { timedData };
DbData data = new DbData(ATTRIBUTE_NAME);
data.setDataType(TangoConst.Tango_DEV_STATE);
data.setDataFormat(AttrDataFormat._SPECTRUM);
data.setTimedData(timedDataArray);
testMapping(expectedRead, expectedWrite, data, valueRO, valueWO, defaultValue);
}
@Test
public void mapScalarBooleanTest() {
boolean read = true;
boolean write = false;
boolean[] value = { read, write };
boolean[] valueRO = { read };
boolean[] valueWO = { write };
Boolean[] expectedRead = { read };
Boolean[] expectedWrite = { write };
Boolean[] defaultValue = { Boolean.FALSE };
NullableTimedData timedData = new NullableTimedData();
timedData.setDataType(TangoConst.Tango_DEV_BOOLEAN);
timedData.setValue(value, null);
NullableTimedData[] timedDataArray = { timedData };
DbData data = new DbData(ATTRIBUTE_NAME);
data.setDataType(TangoConst.Tango_DEV_BOOLEAN);
data.setDataFormat(AttrDataFormat._SCALAR);
data.setTimedData(timedDataArray);
testMapping(expectedRead, expectedWrite, data, valueRO, valueWO, defaultValue);
}
@Test
public void mapSpectrumBooleanTest() {
boolean[] read = { true, true };
boolean[] write = { false, false };
boolean[] value = ArrayUtils.addAll(read, write);
boolean[] valueRO = read;
boolean[] valueWO = write;
Boolean[][] expectedRead = { ArrayUtils.toObject(read) };
Boolean[][] expectedWrite = { ArrayUtils.toObject(write) };
Boolean[][] defaultValue = { null };
NullableTimedData timedData = new NullableTimedData();
timedData.setDataType(TangoConst.Tango_DEV_BOOLEAN);
timedData.setValue(value, null);
timedData.setX(2);
NullableTimedData[] timedDataArray = { timedData };
DbData data = new DbData(ATTRIBUTE_NAME);
data.setDataType(TangoConst.Tango_DEV_BOOLEAN);
data.setDataFormat(AttrDataFormat._SPECTRUM);
data.setTimedData(timedDataArray);
testMapping(expectedRead, expectedWrite, data, valueRO, valueWO, defaultValue);
}
@Test
public void mapScalarDoubleTest() {
double read = 2.5;
double write = 2.5;
double[] value = { read, write };
double[] valueRO = { read };
double[] valueWO = { write };
Double[] expectedRead = { read };
Double[] expectedWrite = { write };
Double[] defaultValue = { Double.NaN };
NullableTimedData timedData = new NullableTimedData();
timedData.setDataType(TangoConst.Tango_DEV_DOUBLE);
timedData.setValue(value, null);
NullableTimedData[] timedDataArray = { timedData };
DbData data = new DbData(ATTRIBUTE_NAME);
data.setDataType(TangoConst.Tango_DEV_DOUBLE);
data.setDataFormat(AttrDataFormat._SCALAR);
data.setTimedData(timedDataArray);
testMapping(expectedRead, expectedWrite, data, valueRO, valueWO, defaultValue);
}
@Test
public void mapSpectrumDoubleTest() {
double[] read = { 1.5f, 2.6f };
double[] write = { 6.1f, 5f };
double[] value = ArrayUtils.addAll(read, write);
double[] valueRO = read;
double[] valueWO = write;
Double[][] expectedRead = { ArrayUtils.toObject(read) };
Double[][] expectedWrite = { ArrayUtils.toObject(write) };
Double[][] defaultValue = { null };
NullableTimedData timedData = new NullableTimedData();
timedData.setDataType(TangoConst.Tango_DEV_DOUBLE);
timedData.setValue(value, null);
timedData.setX(2);
NullableTimedData[] timedDataArray = { timedData };
DbData data = new DbData(ATTRIBUTE_NAME);
data.setDataType(TangoConst.Tango_DEV_DOUBLE);
data.setDataFormat(AttrDataFormat._SPECTRUM);
data.setTimedData(timedDataArray);
testMapping(expectedRead, expectedWrite, data, valueRO, valueWO, defaultValue);
}
@Test
public void mapScalarStringTest() {
String read = "read";
String write = "write";
String[] value = { read, write };
String[] valueRO = { read };
String[] valueWO = { write };
String[] expectedRead = { read };
String[] expectedWrite = { write };
String[] defaultValue = { null };
NullableTimedData timedData = new NullableTimedData();
timedData.setDataType(TangoConst.Tango_DEV_STRING);
timedData.setValue(value, null);
NullableTimedData[] timedDataArray = { timedData };
DbData data = new DbData(ATTRIBUTE_NAME);
data.setDataType(TangoConst.Tango_DEV_STRING);
data.setDataFormat(AttrDataFormat._SCALAR);
data.setTimedData(timedDataArray);
testMapping(expectedRead, expectedWrite, data, valueRO, valueWO, defaultValue);
}
@Test
public void mapSpectrumStringTest() {
String[] read = { "read1", "read2" };
String[] write = { "write1", "write2" };
String[] value = ArrayUtils.addAll(read, write);
String[] valueRO = read;
String[] valueWO = write;
String[][] expectedRead = { read };
String[][] expectedWrite = { write };
String[][] defaultValue = { null };
NullableTimedData timedData = new NullableTimedData();
timedData.setDataType(TangoConst.Tango_DEV_STRING);
timedData.setValue(value, null);
timedData.setX(2);
NullableTimedData[] timedDataArray = { timedData };
DbData data = new DbData(ATTRIBUTE_NAME);
data.setDataType(TangoConst.Tango_DEV_STRING);
data.setDataFormat(AttrDataFormat._SPECTRUM);
data.setTimedData(timedDataArray);
testMapping(expectedRead, expectedWrite, data, valueRO, valueWO, defaultValue);
}
@Test
public void mapScalarFloatTest() {
float read = 1.5f;
float write = 6.9f;
float[] value = { read, write };
float[] valueRO = { read };
float[] valueWO = { write };
Float[] expectedRead = { read };
Float[] expectedWrite = { write };
Float[] defaultValue = { 0f };
NullableTimedData timedData = new NullableTimedData();
timedData.setDataType(TangoConst.Tango_DEV_FLOAT);
timedData.setValue(value, null);
NullableTimedData[] timedDataArray = { timedData };
DbData data = new DbData(ATTRIBUTE_NAME);
data.setDataType(TangoConst.Tango_DEV_FLOAT);
data.setDataFormat(AttrDataFormat._SCALAR);
data.setTimedData(timedDataArray);
testMapping(expectedRead, expectedWrite, data, valueRO, valueWO, defaultValue);
}
@Test
public void mapSpectrulFloatTest() {
float[] read = { 1.5f, 2.6f };
float[] write = { 6.1f, 5f };
float[] value = ArrayUtils.addAll(read, write);
float[] valueRO = read;
float[] valueWO = write;
Float[][] expectedRead = { ArrayUtils.toObject(read) };
Float[][] expectedWrite = { ArrayUtils.toObject(write) };
Float[][] defaultValue = { null };
NullableTimedData timedData = new NullableTimedData();
timedData.setDataType(TangoConst.Tango_DEV_FLOAT);
timedData.setValue(value, null);
timedData.setX(2);
NullableTimedData[] timedDataArray = { timedData };
DbData data = new DbData(ATTRIBUTE_NAME);
data.setDataType(TangoConst.Tango_DEV_FLOAT);
data.setDataFormat(AttrDataFormat._SPECTRUM);
data.setTimedData(timedDataArray);
testMapping(expectedRead, expectedWrite, data, valueRO, valueWO, defaultValue);
}
@Test
public void mapScalarLong64Test() {
long read = 1l;
long write = 6l;
long[] value = { read, write };
long[] valueRO = { read };
long[] valueWO = { write };
Long[] expectedRead = { read };
Long[] expectedWrite = { write };
Long[] defaultValue = { 0l };
NullableTimedData timedData = new NullableTimedData();
timedData.setDataType(TangoConst.Tango_DEV_LONG64);
timedData.setValue(value, null);
NullableTimedData[] timedDataArray = { timedData };
DbData data = new DbData(ATTRIBUTE_NAME);
data.setDataType(TangoConst.Tango_DEV_LONG64);
data.setDataFormat(AttrDataFormat._SCALAR);
data.setTimedData(timedDataArray);
testMapping(expectedRead, expectedWrite, data, valueRO, valueWO, defaultValue);
timedData.setDataType(TangoConst.Tango_DEV_LONG64);
timedData.setValue(value, null);
NullableTimedData[] utimedDataArray = { timedData };
data = new DbData(ATTRIBUTE_NAME);
data.setDataType(TangoConst.Tango_DEV_ULONG64);
data.setDataFormat(AttrDataFormat._SCALAR);
data.setTimedData(utimedDataArray);
testMapping(expectedRead, expectedWrite, data, valueRO, valueWO, defaultValue);
}
@Test
public void mapSpectrumLong64Test() {
long[] read = { 1l, 2l };
long[] write = { 6l, 5l };
long[] value = ArrayUtils.addAll(read, write);
long[] valueRO = read;
long[] valueWO = write;
Long[][] expectedRead = { ArrayUtils.toObject(read) };
Long[][] expectedWrite = { ArrayUtils.toObject(write) };
Long[][] defaultValue = { null };
NullableTimedData timedData = new NullableTimedData();
timedData.setDataType(TangoConst.Tango_DEV_LONG64);
timedData.setValue(value, null);
timedData.setX(2);
NullableTimedData[] timedDataArray = { timedData };
DbData data = new DbData(ATTRIBUTE_NAME);
data.setDataType(TangoConst.Tango_DEV_LONG64);
data.setDataFormat(AttrDataFormat._SPECTRUM);
data.setTimedData(timedDataArray);
testMapping(expectedRead, expectedWrite, data, valueRO, valueWO, defaultValue);
timedData.setDataType(TangoConst.Tango_DEV_LONG64);
timedData.setValue(value, null);
NullableTimedData[] utimedDataArray = { timedData };
data = new DbData(ATTRIBUTE_NAME);
data.setDataType(TangoConst.Tango_DEV_ULONG64);
data.setDataFormat(AttrDataFormat._SPECTRUM);
data.setTimedData(utimedDataArray);
testMapping(expectedRead, expectedWrite, data, valueRO, valueWO, defaultValue);
}
@Test
public void mapScalarLongTest() {
int read = 1;
int write = 6;
int[] value = { read, write };
int[] valueRO = { read };
int[] valueWO = { write };
Integer[] expectedRead = { read };
Integer[] expectedWrite = { write };
Integer[] defaultValue = { 0 };
NullableTimedData timedData = new NullableTimedData();
timedData.setDataType(TangoConst.Tango_DEV_LONG);
timedData.setValue(value, null);
NullableTimedData[] timedDataArray = { timedData };
DbData data = new DbData(ATTRIBUTE_NAME);
data.setDataType(TangoConst.Tango_DEV_LONG);
data.setDataFormat(AttrDataFormat._SCALAR);
data.setTimedData(timedDataArray);
testMapping(expectedRead, expectedWrite, data, valueRO, valueWO, defaultValue);
timedData.setDataType(TangoConst.Tango_DEV_LONG);
timedData.setValue(value, null);
NullableTimedData[] utimedDataArray = { timedData };
data = new DbData(ATTRIBUTE_NAME);
data.setDataType(TangoConst.Tango_DEV_ULONG);
data.setDataFormat(AttrDataFormat._SCALAR);
data.setTimedData(utimedDataArray);
testMapping(expectedRead, expectedWrite, data, valueRO, valueWO, defaultValue);
}
@Test
public void mapSpectrumLongTest() {
int[] read = { 1, 2 };
int[] write = { 6, 5 };
int[] value = ArrayUtils.addAll(read, write);
int[] valueRO = read;
int[] valueWO = write;
Integer[][] expectedRead = { ArrayUtils.toObject(read) };
Integer[][] expectedWrite = { ArrayUtils.toObject(write) };
Integer[][] defaultValue = { null };
NullableTimedData timedData = new NullableTimedData();
timedData.setDataType(TangoConst.Tango_DEV_LONG);
timedData.setValue(value, null);
timedData.setX(2);
NullableTimedData[] timedDataArray = { timedData };
DbData data = new DbData(ATTRIBUTE_NAME);
data.setDataType(TangoConst.Tango_DEV_LONG);
data.setDataFormat(AttrDataFormat._SPECTRUM);
data.setTimedData(timedDataArray);
testMapping(expectedRead, expectedWrite, data, valueRO, valueWO, defaultValue);
timedData.setDataType(TangoConst.Tango_DEV_LONG);
timedData.setValue(value, null);
NullableTimedData[] utimedDataArray = { timedData };
data = new DbData(ATTRIBUTE_NAME);
data.setDataType(TangoConst.Tango_DEV_ULONG);
data.setDataFormat(AttrDataFormat._SPECTRUM);
data.setTimedData(utimedDataArray);
testMapping(expectedRead, expectedWrite, data, valueRO, valueWO, defaultValue);
}
@Test
public void mapScalarShortTest() {
short read = 1;
short write = 6;
short[] value = { read, write };
short[] valueRO = { read };
short[] valueWO = { write };
Short[] expectedRead = { read };
Short[] expectedWrite = { write };
Short[] defaultValue = { null };
NullableTimedData timedData = new NullableTimedData();
timedData.setDataType(TangoConst.Tango_DEV_SHORT);
timedData.setValue(value, null);
NullableTimedData[] timedDataArray = { timedData };
DbData data = new DbData(ATTRIBUTE_NAME);
data.setDataType(TangoConst.Tango_DEV_SHORT);
data.setDataFormat(AttrDataFormat._SCALAR);
data.setTimedData(timedDataArray);
testMapping(expectedRead, expectedWrite, data, valueRO, valueWO, defaultValue);
timedData.setDataType(TangoConst.Tango_DEV_USHORT);
timedData.setValue(value, null);
NullableTimedData[] utimedDataArray = { timedData };
data = new DbData(ATTRIBUTE_NAME);
data.setDataType(TangoConst.Tango_DEV_USHORT);
data.setDataFormat(AttrDataFormat._SCALAR);
data.setTimedData(utimedDataArray);
testMapping(expectedRead, expectedWrite, data, valueRO, valueWO, defaultValue);
timedData.setDataType(TangoConst.Tango_DEV_UCHAR);
timedData.setValue(value, null);
NullableTimedData[] uctimedDataArray = { timedData };
data = new DbData(ATTRIBUTE_NAME);
data.setDataType(TangoConst.Tango_DEV_UCHAR);
data.setDataFormat(AttrDataFormat._SCALAR);
data.setTimedData(uctimedDataArray);
testMapping(expectedRead, expectedWrite, data, valueRO, valueWO, defaultValue);
}
@Test
public void mapSpectrumShortTest() {
short[] read = { 1, 2 };
short[] write = { 6, 5 };
short[] value = ArrayUtils.addAll(read, write);
short[] valueRO = read;
short[] valueWO = write;
Short[][] expectedRead = { ArrayUtils.toObject(read) };
Short[][] expectedWrite = { ArrayUtils.toObject(write) };
Short[][] defaultValue = { null };
NullableTimedData timedData = new NullableTimedData();
timedData.setDataType(TangoConst.Tango_DEV_SHORT);
timedData.setValue(value, null);
timedData.setX(2);
NullableTimedData[] timedDataArray = { timedData };
DbData data = new DbData(ATTRIBUTE_NAME);
data.setDataType(TangoConst.Tango_DEV_SHORT);
data.setDataFormat(AttrDataFormat._SPECTRUM);
data.setTimedData(timedDataArray);
testMapping(expectedRead, expectedWrite, data, valueRO, valueWO, defaultValue);
timedData.setDataType(TangoConst.Tango_DEV_USHORT);
timedData.setValue(value, null);
NullableTimedData[] utimedDataArray = { timedData };
data = new DbData(ATTRIBUTE_NAME);
data.setDataType(TangoConst.Tango_DEV_USHORT);
data.setDataFormat(AttrDataFormat._SPECTRUM);
data.setTimedData(utimedDataArray);
testMapping(expectedRead, expectedWrite, data, valueRO, valueWO, defaultValue);
timedData.setDataType(TangoConst.Tango_DEV_UCHAR);
timedData.setValue(value, null);
NullableTimedData[] uctimedDataArray = { timedData };
data = new DbData(ATTRIBUTE_NAME);
data.setDataType(TangoConst.Tango_DEV_UCHAR);
data.setDataFormat(AttrDataFormat._SPECTRUM);
data.setTimedData(uctimedDataArray);
testMapping(expectedRead, expectedWrite, data, valueRO, valueWO, defaultValue);
}
@SuppressWarnings("unchecked")
private <T> void testMapping(T[] expectedRead, T[] expectedWrite, DbData data, Object valueRO, Object valueWO,
T[] defaultvalue) {
data.setWritable(AttrWriteType._READ_WRITE);
AttributeValues att = DbDataMapper.mapAttributeValues(ATTRIBUTE_NAME, data);
assertArrayEquals(expectedRead, (T[]) att.getRead());
assertArrayEquals(expectedWrite, (T[]) att.getWrite());
data.setWritable(AttrWriteType._READ_WITH_WRITE);
att = DbDataMapper.mapAttributeValues(ATTRIBUTE_NAME, data);
assertArrayEquals(expectedRead, (T[]) att.getRead());
assertArrayEquals(expectedWrite, (T[]) att.getWrite());
data.setWritable(AttrWriteType._READ);
data.getTimedData()[0].setValue(valueRO, null);
att = DbDataMapper.mapAttributeValues(ATTRIBUTE_NAME, data);
assertArrayEquals(expectedRead, (T[]) att.getRead());
assertArrayEquals(null, (T[]) att.getWrite());
data.setWritable(AttrWriteType._WRITE);
data.getTimedData()[0].setValue(valueWO, null);
att = DbDataMapper.mapAttributeValues(ATTRIBUTE_NAME, data);
assertArrayEquals(null, (T[]) att.getRead());
assertArrayEquals(expectedWrite, (T[]) att.getWrite());
// NULL case
data.setWritable(AttrWriteType._READ_WRITE);
data.getTimedData()[0].setValue(null, null);
att = DbDataMapper.mapAttributeValues(ATTRIBUTE_NAME, data);
assertArrayEquals(defaultvalue, (T[]) att.getRead());
assertArrayEquals(defaultvalue, (T[]) att.getWrite());
data.setWritable(AttrWriteType._READ_WITH_WRITE);
att = DbDataMapper.mapAttributeValues(ATTRIBUTE_NAME, data);
assertArrayEquals(defaultvalue, (T[]) att.getRead());
assertArrayEquals(defaultvalue, (T[]) att.getWrite());
data.setWritable(AttrWriteType._READ);
att = DbDataMapper.mapAttributeValues(ATTRIBUTE_NAME, data);
assertArrayEquals(defaultvalue, (T[]) att.getRead());
assertArrayEquals(null, (T[]) att.getWrite());
data.setWritable(AttrWriteType._WRITE);
att = DbDataMapper.mapAttributeValues(ATTRIBUTE_NAME, data);
assertArrayEquals(null, (T[]) att.getRead());
assertArrayEquals(defaultvalue, (T[]) att.getWrite());
}
}
enum SamplingType {
DAY
HOUR
MINUTE
SECOND
ALL
}
enum ReductionType{
AVG
NEAREST
}
enum TangoWriteType{
READ
WRITE
READ_WRITE
}
type Query {
"""
Get Tango domains of archived attributes
"""
domains: [String!]
"""
Get Tango families of archived attributes given the Tango domain
"""
families(domain: String): [String]
"""
Get Tango members of archived attributes given the Tango domain & family
"""
members(domain: String,family: String): [String]
"""
Get Tango attributes of archived attributes given the Tango domain & family & member
"""
attributesNames(domain: String,family: String, member: String): [String]
"""
Get Tango attributes last values of archived attributes given a pattern of a full attribute name (w/ "*")
"""
attributes(attributeNamePatterns: [String]): [TangoAttribute]
"""
Get Tango attributes values of archived attributes given a pattern of a full attribute name (w/ "*")
"""
attributesValues(attributeNamePatterns: [String], startDate: String, endDate:String, sampling: SamplingType, samplingValue:Int, reduction: ReductionType, writeType: TangoWriteType): [AttributeValues]
}
# GQL possible types: Int, Float, String, Boolean and ID
scalar JSON
"""
fetched attribute values and timestamps
"""
type AttributeValues {
name: String
timestamps: [Long]
read: JSON
write: JSON
}
type TangoAttribute {
format: String
lastInsertDate: Long
#read: JSON
type: String
writeType: String
lastRead: JSON
lastWrite: JSON
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment