This is an automated email from the ASF dual-hosted git repository.
pvillard pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/nifi.git
The following commit(s) were added to refs/heads/main by this push:
new e16cc9d NIFI-8336: Change BULLETINS table bulletinTimestamp column to
Long
e16cc9d is described below
commit e16cc9df46bf46d461b605d3ca5ff29b18fe6a78
Author: Matthew Burgess <[email protected]>
AuthorDate: Wed Mar 17 13:27:27 2021 -0400
NIFI-8336: Change BULLETINS table bulletinTimestamp column to Long
Signed-off-by: Pierre Villard <[email protected]>
This closes #4909.
---
.../sql/bulletins/BulletinEnumerator.java | 4 +-
.../reporting/sql/bulletins/BulletinTable.java | 3 +-
.../reporting/sql/TestQueryNiFiReportingTask.java | 72 ++++++++++++++++++++++
3 files changed, 75 insertions(+), 4 deletions(-)
diff --git
a/nifi-nar-bundles/nifi-sql-reporting-bundle/nifi-sql-reporting-tasks/src/main/java/org/apache/nifi/reporting/sql/bulletins/BulletinEnumerator.java
b/nifi-nar-bundles/nifi-sql-reporting-bundle/nifi-sql-reporting-tasks/src/main/java/org/apache/nifi/reporting/sql/bulletins/BulletinEnumerator.java
index 608f697..8074bca 100644
---
a/nifi-nar-bundles/nifi-sql-reporting-bundle/nifi-sql-reporting-tasks/src/main/java/org/apache/nifi/reporting/sql/bulletins/BulletinEnumerator.java
+++
b/nifi-nar-bundles/nifi-sql-reporting-bundle/nifi-sql-reporting-tasks/src/main/java/org/apache/nifi/reporting/sql/bulletins/BulletinEnumerator.java
@@ -104,8 +104,8 @@ public class BulletinEnumerator implements
Enumerator<Object> {
nodeId,
bulletin.getSourceId(),
bulletin.getSourceName(),
- bulletin.getSourceType().name(),
- bulletin.getTimestamp()
+ bulletin.getSourceType() == null ? null :
bulletin.getSourceType().name(),
+ bulletin.getTimestamp() == null ? null :
bulletin.getTimestamp().getTime()
};
// If we want no fields just return null
diff --git
a/nifi-nar-bundles/nifi-sql-reporting-bundle/nifi-sql-reporting-tasks/src/main/java/org/apache/nifi/reporting/sql/bulletins/BulletinTable.java
b/nifi-nar-bundles/nifi-sql-reporting-bundle/nifi-sql-reporting-tasks/src/main/java/org/apache/nifi/reporting/sql/bulletins/BulletinTable.java
index 3fc5ff6..0d6a36b 100644
---
a/nifi-nar-bundles/nifi-sql-reporting-bundle/nifi-sql-reporting-tasks/src/main/java/org/apache/nifi/reporting/sql/bulletins/BulletinTable.java
+++
b/nifi-nar-bundles/nifi-sql-reporting-bundle/nifi-sql-reporting-tasks/src/main/java/org/apache/nifi/reporting/sql/bulletins/BulletinTable.java
@@ -38,7 +38,6 @@ import org.apache.nifi.reporting.ReportingContext;
import java.lang.reflect.Type;
import java.util.Arrays;
-import java.util.Date;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
@@ -180,7 +179,7 @@ public class BulletinTable extends AbstractTable implements
QueryableTable, Tran
typeFactory.createJavaType(String.class),
typeFactory.createJavaType(String.class),
typeFactory.createJavaType(String.class),
- typeFactory.createJavaType(Date.class)
+ typeFactory.createJavaType(long.class)
);
relDataType = typeFactory.createStructType(Pair.zip(names, types));
diff --git
a/nifi-nar-bundles/nifi-sql-reporting-bundle/nifi-sql-reporting-tasks/src/test/java/org/apache/nifi/reporting/sql/TestQueryNiFiReportingTask.java
b/nifi-nar-bundles/nifi-sql-reporting-bundle/nifi-sql-reporting-tasks/src/test/java/org/apache/nifi/reporting/sql/TestQueryNiFiReportingTask.java
index 715e2bc..84c061f 100644
---
a/nifi-nar-bundles/nifi-sql-reporting-bundle/nifi-sql-reporting-tasks/src/test/java/org/apache/nifi/reporting/sql/TestQueryNiFiReportingTask.java
+++
b/nifi-nar-bundles/nifi-sql-reporting-bundle/nifi-sql-reporting-tasks/src/test/java/org/apache/nifi/reporting/sql/TestQueryNiFiReportingTask.java
@@ -31,6 +31,10 @@ import org.apache.nifi.provenance.ProvenanceEventRecord;
import org.apache.nifi.provenance.ProvenanceEventType;
import org.apache.nifi.record.sink.MockRecordSinkService;
import org.apache.nifi.record.sink.RecordSinkService;
+import org.apache.nifi.reporting.Bulletin;
+import org.apache.nifi.reporting.BulletinFactory;
+import org.apache.nifi.reporting.BulletinQuery;
+import org.apache.nifi.reporting.ComponentType;
import org.apache.nifi.reporting.EventAccess;
import org.apache.nifi.reporting.InitializationException;
import org.apache.nifi.reporting.ReportingContext;
@@ -38,6 +42,7 @@ import
org.apache.nifi.reporting.ReportingInitializationContext;
import org.apache.nifi.reporting.sql.util.QueryMetricsUtil;
import org.apache.nifi.reporting.util.metrics.MetricNames;
import org.apache.nifi.state.MockStateManager;
+import org.apache.nifi.util.MockBulletinRepository;
import org.apache.nifi.util.MockFlowFile;
import org.apache.nifi.util.MockProcessSession;
import org.apache.nifi.util.MockPropertyValue;
@@ -51,6 +56,7 @@ import org.mockito.stubbing.Answer;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collection;
+import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -60,6 +66,7 @@ import java.util.stream.Collectors;
import java.util.stream.Stream;
import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.mock;
@@ -292,6 +299,32 @@ public class TestQueryNiFiReportingTask {
assertEquals("DROP", row.get("eventType"));
}
+ @Test
+ public void testBulletinTable() throws IOException,
InitializationException {
+ final Map<PropertyDescriptor, String> properties = new HashMap<>();
+ properties.put(QueryMetricsUtil.RECORD_SINK, "mock-record-sink");
+ properties.put(QueryMetricsUtil.QUERY, "select * from BULLETINS order
by bulletinTimestamp asc");
+ reportingTask = initTask(properties);
+ reportingTask.onTrigger(context);
+
+ List<Map<String, Object>> rows = mockRecordSinkService.getRows();
+ assertEquals(3, rows.size());
+ // Validate the first row
+ Map<String, Object> row = rows.get(0);
+ assertEquals(13, row.size());
+ assertNotNull(row.get("bulletinId"));
+ assertEquals("controller", row.get("bulletinCategory"));
+ assertEquals("WARN", row.get("bulletinLevel"));
+ // Validate the second row
+ row = rows.get(1);
+ assertEquals("processor", row.get("bulletinCategory"));
+ assertEquals("INFO", row.get("bulletinLevel"));
+ // Validate the third row
+ row = rows.get(2);
+ assertEquals("controller service", row.get("bulletinCategory"));
+ assertEquals("ERROR", row.get("bulletinLevel"));
+ }
+
private MockQueryNiFiReportingTask initTask(Map<PropertyDescriptor,
String> customProperties) throws InitializationException, IOException {
final ComponentLog logger = mock(ComponentLog.class);
@@ -374,9 +407,48 @@ public class TestQueryNiFiReportingTask {
}
Mockito.when(eventAccess.getProvenanceRepository()).thenReturn(provenanceRepository);
+
+ MockBulletinRepository bulletinRepository = new
MockQueryBulletinRepository();
+
bulletinRepository.addBulletin(BulletinFactory.createBulletin("controller",
"WARN", "test bulletin 2"));
+
bulletinRepository.addBulletin(BulletinFactory.createBulletin("processor",
"INFO", "test bulletin 1"));
+
bulletinRepository.addBulletin(BulletinFactory.createBulletin("controller
service", "ERROR", "test bulletin 2"));
+
Mockito.when(context.getBulletinRepository()).thenReturn(bulletinRepository);
+
return reportingTask;
}
private static final class MockQueryNiFiReportingTask extends
QueryNiFiReportingTask {
}
+
+ private static class MockQueryBulletinRepository extends
MockBulletinRepository {
+
+ List<Bulletin> bulletinList;
+
+
+ public MockQueryBulletinRepository() {
+ bulletinList = new ArrayList<>();
+ }
+
+ @Override
+ public void addBulletin(Bulletin bulletin) {
+ bulletinList.add(bulletin);
+ }
+
+ @Override
+ public List<Bulletin> findBulletins(BulletinQuery bulletinQuery) {
+ if (bulletinQuery.getSourceType().equals(ComponentType.PROCESSOR))
{
+ return Collections.singletonList(bulletinList.get(1));
+ } else if
(bulletinQuery.getSourceType().equals(ComponentType.CONTROLLER_SERVICE)) {
+ return Collections.singletonList(bulletinList.get(2));
+ } else {
+ return Collections.emptyList();
+ }
+ }
+
+ @Override
+ public List<Bulletin> findBulletinsForController() {
+ return Collections.singletonList(bulletinList.get(0));
+ }
+
+ }
}
\ No newline at end of file