use of com.infiniteautomation.mango.db.tables.DataPoints in project ma-core-public by infiniteautomation.
the class EventInstanceDao method queryDataPointEventCountsByRQL.
/**
* @param conditions supplied by {@link #createEventCountsConditions(net.jazdw.rql.parser.ASTNode)}
* @param from from timestamp
* @param to to timestamp
* @param user user executing the query
* @param callback result consumer
*/
public void queryDataPointEventCountsByRQL(@NonNull ConditionSortLimitWithTagKeys conditions, @Nullable Long from, @Nullable Long to, @NonNull PermissionHolder user, @NonNull Consumer<AlarmPointTagCount> callback) {
Table<Record6<Integer, String, Integer, Integer, Long, Long>> eventCountsTable = eventCountsTable(from, to, user);
Map<String, Field<String>> tagFields = conditions.getTagFields();
SelectJoinStep<Record> joinStep = create.select(eventCountsFields.values()).select(tagFields.values()).from(eventCountsTable).leftOuterJoin(dataPoints).on(dataPoints.id.equal(eventCountsTable.field(table.typeRef1)));
SelectConditionStep<Record> conditionStep = dataPointTagsDao.joinTags(joinStep, dataPoints.id, tagFields).where(conditions.getCondition());
Select<Record> select = applySortLimitOffset(conditionStep, conditions);
try (Stream<Record> stream = select.stream()) {
stream.map(record -> {
AlarmPointTagCount result = new AlarmPointTagCount();
result.setXid(record.get(dataPoints.xid));
result.setName(record.get(dataPoints.name));
result.setDeviceName(record.get(dataPoints.deviceName));
result.setMessage(readTranslatableMessage(record.get(eventCountsTable.field(table.message))));
result.setAlarmLevel(AlarmLevels.fromValue(record.get(eventCountsTable.field(table.alarmLevel))));
result.setCount(record.get(eventCountsTable.field(count)));
result.setLatestActiveTs(record.get(eventCountsTable.field(latestActive)));
result.setLatestRtnTs(record.get(eventCountsTable.field(latestRtn)));
Map<String, String> tags = new HashMap<>();
for (Entry<String, Field<String>> entry : tagFields.entrySet()) {
String value = record.get(entry.getValue());
if (value != null) {
tags.put(entry.getKey(), value);
}
}
result.setTags(tags);
return result;
}).forEach(callback);
}
}
use of com.infiniteautomation.mango.db.tables.DataPoints in project ma-core-public by infiniteautomation.
the class PointValueDaoSQL method topPointHistoryCounts.
@Override
public List<PointHistoryCount> topPointHistoryCounts(int limit) {
PointValueDao.validateLimit(limit);
DataPoints points = DataPoints.DATA_POINTS;
DataSources dataSources = DataSources.DATA_SOURCES;
Field<Integer> count = DSL.count().as("count");
return create.select(count).select(dataPointDao.getSelectFields()).from(pv).innerJoin(points).on(points.id.eq(pv.dataPointId)).leftJoin(dataSources).on(dataSources.id.eq(points.dataSourceId)).groupBy(points.id, dataSources.name, dataSources.xid, dataSources.dataSourceType).orderBy(count.desc()).limit(limit).fetch(record -> {
DataPointVO point = dataPointDao.mapRecord(record);
dataPointDao.loadRelationalData(point);
return new PointHistoryCount(point, record.get(count));
});
}
use of com.infiniteautomation.mango.db.tables.DataPoints in project ma-core-public by infiniteautomation.
the class DataPointDaoTest method testDeletePointsAndSeriesIds.
@Test
public void testDeletePointsAndSeriesIds() {
// Insert some points that won't go away for this test
for (int i = 0; i < 5; i++) {
DataPointVO point = newVO();
dao.insert(point);
}
// Insert points to delete
List<IDataPoint> points = new ArrayList<>();
for (int i = 0; i < 5; i++) {
DataPointVO point = newVO();
dao.insert(point);
points.add(point);
}
DatabaseProxy proxy = Common.getBean(DatabaseProxy.class);
DataPoints dataPoints = DataPoints.DATA_POINTS;
TimeSeries timeSeries = TimeSeries.TIME_SERIES;
// Delete the data points but not the series id
for (IDataPoint point : points) {
dao.delete((DataPointVO) point);
}
// Ensure the series Ids are gone via the delete post relational
for (IDataPoint point : points) {
assertEquals(0, proxy.getContext().selectCount().from(timeSeries).where(timeSeries.id.eq(point.getSeriesId())).fetchSingle().value1().intValue());
}
// delete the orphaned series ids (none)
assertEquals(0, dao.deleteOrphanedTimeSeries());
}
use of com.infiniteautomation.mango.db.tables.DataPoints in project ma-core-public by infiniteautomation.
the class DataPointDaoTest method testDeleteOrphanedSeries.
@Test
public void testDeleteOrphanedSeries() {
// Insert some points that won't go away for this test
for (int i = 0; i < 5; i++) {
DataPointVO point = newVO();
dao.insert(point);
}
// Insert points to delete
List<IDataPoint> points = new ArrayList<>();
for (int i = 0; i < 5; i++) {
DataPointVO point = newVO();
dao.insert(point);
points.add(point);
}
DatabaseProxy proxy = Common.getBean(DatabaseProxy.class);
DataPoints dataPoints = DataPoints.DATA_POINTS;
TimeSeries timeSeries = TimeSeries.TIME_SERIES;
// Delete the data points but not the series id
for (IDataPoint point : points) {
proxy.getContext().deleteFrom(dataPoints).where(dataPoints.id.eq(point.getId())).execute();
}
// Ensure the series Ids are still there
for (IDataPoint point : points) {
assertEquals(1, proxy.getContext().selectCount().from(timeSeries).where(timeSeries.id.eq(point.getSeriesId())).fetchSingle().value1().intValue());
}
// delete the orphaned series id and ensure it is gone
assertEquals(5, dao.deleteOrphanedTimeSeries());
// Ensure the series Id are gone
for (IDataPoint point : points) {
assertEquals(0, proxy.getContext().selectCount().from(timeSeries).where(timeSeries.id.eq(point.getSeriesId())).fetchSingle().value1().intValue());
}
}
use of com.infiniteautomation.mango.db.tables.DataPoints in project ma-core-public by infiniteautomation.
the class DataPointDaoTest method testDeleteOrphanedSeriesUsingCustomSeriesId.
@Test
public void testDeleteOrphanedSeriesUsingCustomSeriesId() {
DatabaseProxy proxy = Common.getBean(DatabaseProxy.class);
DataPoints dataPoints = DataPoints.DATA_POINTS;
TimeSeries timeSeries = TimeSeries.TIME_SERIES;
int seriesIdCounter = 10;
// Insert some points that won't go away for this test
for (int i = 0; i < 5; i++) {
DataPointVO point = newVO();
proxy.getContext().insertInto(timeSeries).columns(timeSeries.id).values(seriesIdCounter).execute();
point.setSeriesId(seriesIdCounter++);
dao.insert(point);
}
// Insert points to delete
List<IDataPoint> points = new ArrayList<>();
for (int i = 0; i < 5; i++) {
DataPointVO point = newVO();
proxy.getContext().insertInto(timeSeries).columns(timeSeries.id).values(seriesIdCounter).execute();
point.setSeriesId(seriesIdCounter++);
dao.insert(point);
points.add(point);
}
// Delete the data points but not the series id
for (IDataPoint point : points) {
proxy.getContext().deleteFrom(dataPoints).where(dataPoints.id.eq(point.getId())).execute();
}
// Ensure the series Ids are still there
for (IDataPoint point : points) {
assertEquals(1, proxy.getContext().selectCount().from(timeSeries).where(timeSeries.id.eq(point.getSeriesId())).fetchSingle().value1().intValue());
}
// delete the orphaned series id and ensure it is gone
assertEquals(5, dao.deleteOrphanedTimeSeries());
// Ensure the series Id are gone
for (IDataPoint point : points) {
assertEquals(0, proxy.getContext().selectCount().from(timeSeries).where(timeSeries.id.eq(point.getSeriesId())).fetchSingle().value1().intValue());
}
}
Aggregations