Class SQLiteHistorian
- java.lang.Object
-
- com.inductiveautomation.gateway.tsdb.historians.SQLiteHistorian
-
- All Implemented Interfaces:
Historian
,HistorianSyncSource
,AnnotationQueryProvider
,AnnotationStorageProvider
public class SQLiteHistorian extends java.lang.Object implements Historian, HistorianSyncSource, AnnotationQueryProvider, AnnotationStorageProvider
Created by colby.clegg on 3/18/2016.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description protected class
SQLiteHistorian.DBLockClosable
protected class
SQLiteHistorian.Query
protected class
SQLiteHistorian.SQLiteStorageSession
protected static class
SQLiteHistorian.Tables
protected static class
SQLiteHistorian.Tag
-
Field Summary
Fields Modifier and Type Field Description static Property<java.lang.String>
FILE_PATH
-
Fields inherited from interface com.inductiveautomation.gateway.tsdb.api.Historian
QUALITY_NOT_FOUND
-
-
Constructor Summary
Constructors Constructor Description SQLiteHistorian()
SQLiteHistorian(java.lang.String filePath)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description java.util.List<java.lang.String>
browse(java.util.Optional<java.lang.String> filter)
Returns a list of paths with data stored, optionally matching a filter.StorageSession
createStorageSession()
Used to store values to the historian.protected SQLiteHistorian.Tag
createTag(java.lang.String tagPath)
protected SQLiteHistorian.Tag
createTag(java.sql.Connection c, java.lang.String tagPath)
void
delete(java.util.List<java.lang.String> paths)
Deletes the tags and all data for the specified paths.void
executeMaintenance()
protected java.sql.Connection
getConnection()
javax.sql.DataSource
getDatasource()
Returns the datasource used for storing syncable data.<T> T
getProperty(Property<T> prop)
Returns the configured or status property requested, or the default value if no further info is available.Status
getQueryStatus()
Returns the status of the storage system.Status
getStorageStatus()
Returns the status of the storage system.protected int
getStorageSyncId()
HistoricalData
getSyncableAnnotations(long syncId)
int
getSyncableCount(long syncId)
Returns the number of data points that could be synchronized from the given point.HistoricalData
getSyncableRetiredTags(long syncId)
HistoricalData
getSyncableTagData(long syncId)
long
getSyncIdTimestamp(long syncId)
Returns the timestamp of the start of the sync group.protected long
getTotalDataCount()
boolean
hasSyncableData(long syncId)
Returns whether there is data available to sync based on the provided id.void
initDriver()
void
initialize(PropertySet properties)
protected void
initializeSync()
protected SQLiteHistorian.DBLockClosable
lockDB()
protected void
newSyncId()
protected boolean
propertiesDiffer(PropertySet a, PropertySet b)
QueryResult
query(java.util.List<java.lang.String> tags, long startTime, long endTime, boolean includeBounding)
Queries the values for the given paths over the specified span of time.java.util.List<Annotation>
queryAnnotations(java.util.List<QualifiedPath> paths, java.util.Date start, java.util.Date end, TypeFilter filter, java.lang.String queryId)
void
register(java.lang.String tagPath, PropertySet properties)
Provides information about a path.void
shutdown()
java.util.List<QualifiedValue>
storeAnnotations(java.util.List<Annotation> annotations)
java.util.List<HistoricalData>
sync(long syncId)
This returns a set of data- it's up to the implementation to decide what makes sense.QualifiedPath
transformToHistoricalPath(java.lang.String tagPath)
void
unregister(java.lang.String tagPath)
-
-
-
Field Detail
-
FILE_PATH
public static final Property<java.lang.String> FILE_PATH
-
-
Method Detail
-
getProperty
@Nullable public <T> T getProperty(Property<T> prop)
Description copied from interface:Historian
Returns the configured or status property requested, or the default value if no further info is available. Most of these properties are defined in HistorianProperties.- Specified by:
getProperty
in interfaceHistorian
-
lockDB
protected SQLiteHistorian.DBLockClosable lockDB()
-
getTotalDataCount
protected long getTotalDataCount()
-
getQueryStatus
public Status getQueryStatus()
Description copied from interface:Historian
Returns the status of the storage system. If the system does not support querying, NotAvailable will be returned.- Specified by:
getQueryStatus
in interfaceHistorian
-
getStorageStatus
public Status getStorageStatus()
Description copied from interface:Historian
Returns the status of the storage system. If the system does not support storage, NotAvailable will be returned. If this is the case, calls to createStorageSession will fail.- Specified by:
getStorageStatus
in interfaceHistorian
-
getConnection
protected java.sql.Connection getConnection() throws java.sql.SQLException
- Throws:
java.sql.SQLException
-
initDriver
public void initDriver() throws java.lang.Exception
- Throws:
java.lang.Exception
-
initialize
public void initialize(PropertySet properties) throws java.lang.Exception
- Specified by:
initialize
in interfaceHistorian
- Throws:
java.lang.Exception
-
getDatasource
public javax.sql.DataSource getDatasource()
Description copied from interface:HistorianSyncSource
Returns the datasource used for storing syncable data.- Specified by:
getDatasource
in interfaceHistorianSyncSource
-
propertiesDiffer
protected boolean propertiesDiffer(PropertySet a, PropertySet b)
-
register
public void register(java.lang.String tagPath, PropertySet properties) throws java.lang.Exception
Description copied from interface:Historian
Provides information about a path. May be called before or after values have been stored, will replace any previous information stored for a path. The property values are usually defined in HistorianProperties.
-
unregister
public void unregister(java.lang.String tagPath) throws java.lang.Exception
- Specified by:
unregister
in interfaceHistorian
- Throws:
java.lang.Exception
-
createTag
protected SQLiteHistorian.Tag createTag(java.sql.Connection c, java.lang.String tagPath) throws java.lang.Exception
- Throws:
java.lang.Exception
-
createTag
protected SQLiteHistorian.Tag createTag(java.lang.String tagPath) throws java.lang.Exception
- Throws:
java.lang.Exception
-
createStorageSession
public StorageSession createStorageSession() throws java.lang.Exception
Description copied from interface:Historian
Used to store values to the historian. Should be used for the immediate set of values and then closed. It should not be held open for longer than necessary.It implements AutoClosable, and should often be used in a try-with-resources block, such as:
try(StorageSession s = historian.createStorageSession()){ s.store... }Important: Not every historian will support storage, some are read-only. This can be checked by calling getStorageStatus() and checking the return for "NotSupported".
- Specified by:
createStorageSession
in interfaceHistorian
- Throws:
java.lang.Exception
-
browse
public java.util.List<java.lang.String> browse(java.util.Optional<java.lang.String> filter)
Description copied from interface:Historian
Returns a list of paths with data stored, optionally matching a filter.
-
delete
public void delete(java.util.List<java.lang.String> paths)
Description copied from interface:Historian
Deletes the tags and all data for the specified paths. Paths may be wildcards using "*". Only expected to work if the historian supports storage, as indicated by getStorageStatus().
-
query
public QueryResult query(java.util.List<java.lang.String> tags, long startTime, long endTime, boolean includeBounding)
Description copied from interface:Historian
Queries the values for the given paths over the specified span of time. The implementation will conform to the following rules:
- If endTime is less than start time, results MAY be provided latest first. If that is not possible, the parameters will be swapped and values returned as normal.
- The result will have a unique PathInfo item for EACH of the paths passed in. If a path is specified multiple times, it will be returned multiple times.
- If a path is not valid, the query result will return ONE DataPoint for the query start time with a quality of 404 (NOT FOUND)
- The timestamps for a given path will be ascending, though between paths they may not be.
-
storeAnnotations
public java.util.List<QualifiedValue> storeAnnotations(java.util.List<Annotation> annotations)
- Specified by:
storeAnnotations
in interfaceAnnotationStorageProvider
-
queryAnnotations
public java.util.List<Annotation> queryAnnotations(java.util.List<QualifiedPath> paths, java.util.Date start, java.util.Date end, TypeFilter filter, java.lang.String queryId)
- Specified by:
queryAnnotations
in interfaceAnnotationQueryProvider
-
executeMaintenance
public void executeMaintenance()
-
initializeSync
protected void initializeSync() throws java.lang.Exception
- Throws:
java.lang.Exception
-
hasSyncableData
public boolean hasSyncableData(long syncId)
Description copied from interface:HistorianSyncSource
Returns whether there is data available to sync based on the provided id.- Specified by:
hasSyncableData
in interfaceHistorianSyncSource
-
sync
public java.util.List<HistoricalData> sync(long syncId)
Description copied from interface:HistorianSyncSource
This returns a set of data- it's up to the implementation to decide what makes sense. If the caller wants more data, it can just call again.- Specified by:
sync
in interfaceHistorianSyncSource
- Parameters:
syncId
- if 0, returns next set of available data based on last query. Otherwise, starts at the given time period.
-
getSyncableTagData
public HistoricalData getSyncableTagData(long syncId)
-
getSyncableAnnotations
public HistoricalData getSyncableAnnotations(long syncId)
-
getSyncableRetiredTags
public HistoricalData getSyncableRetiredTags(long syncId)
-
transformToHistoricalPath
public QualifiedPath transformToHistoricalPath(java.lang.String tagPath)
-
newSyncId
protected void newSyncId()
-
getStorageSyncId
protected int getStorageSyncId()
-
getSyncableCount
public int getSyncableCount(long syncId)
Description copied from interface:HistorianSyncSource
Returns the number of data points that could be synchronized from the given point.- Specified by:
getSyncableCount
in interfaceHistorianSyncSource
-
getSyncIdTimestamp
public long getSyncIdTimestamp(long syncId)
Description copied from interface:HistorianSyncSource
Returns the timestamp of the start of the sync group.- Specified by:
getSyncIdTimestamp
in interfaceHistorianSyncSource
-
-