From 265f8738c47ec4cea3a18c484943e355d2a63d63 Mon Sep 17 00:00:00 2001 From: Michael Holtermann Date: Tue, 30 Apr 2024 12:18:35 +0200 Subject: [PATCH 1/7] search by BPMN Process ID server side --- .../zeebe/monitor/entity/ProcessEntity.java | 3 ++ .../monitor/repository/ProcessRepository.java | 2 + .../monitor/rest/ProcessesViewController.java | 40 ++++++++++++------- 3 files changed, 31 insertions(+), 14 deletions(-) diff --git a/src/main/java/io/zeebe/monitor/entity/ProcessEntity.java b/src/main/java/io/zeebe/monitor/entity/ProcessEntity.java index a23fb8bd..937d4c2a 100644 --- a/src/main/java/io/zeebe/monitor/entity/ProcessEntity.java +++ b/src/main/java/io/zeebe/monitor/entity/ProcessEntity.java @@ -19,6 +19,9 @@ import org.hibernate.Length; @Entity(name = "PROCESS") +@Table(indexes = { + @Index(name = "process_bpmnProcessId", columnList = "BPMN_PROCESS_ID_"), +}) public class ProcessEntity { @Id @Column(name = "KEY_") diff --git a/src/main/java/io/zeebe/monitor/repository/ProcessRepository.java b/src/main/java/io/zeebe/monitor/repository/ProcessRepository.java index d4844831..18defb13 100644 --- a/src/main/java/io/zeebe/monitor/repository/ProcessRepository.java +++ b/src/main/java/io/zeebe/monitor/repository/ProcessRepository.java @@ -40,4 +40,6 @@ List getElementInstanceStatisticsByKeyAndIntentIn( @Param("key") long key, @Param("intents") Collection intents, @Param("excludeElementTypes") Collection excludeElementTypes); + + List findByBpmnProcessIdStartsWith(String bpmnProcessId); } diff --git a/src/main/java/io/zeebe/monitor/rest/ProcessesViewController.java b/src/main/java/io/zeebe/monitor/rest/ProcessesViewController.java index fef1d8e9..d6348de7 100644 --- a/src/main/java/io/zeebe/monitor/rest/ProcessesViewController.java +++ b/src/main/java/io/zeebe/monitor/rest/ProcessesViewController.java @@ -39,8 +39,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.*; import org.springframework.web.server.ResponseStatusException; @Controller @@ -59,25 +58,38 @@ public class ProcessesViewController extends AbstractViewController { @GetMapping("/") public String index(final Map model, final Pageable pageable) { - return processList(model, pageable); + return processList(model, pageable, Optional.empty()); } @GetMapping("/views/processes") - public String processList(final Map model, final Pageable pageable) { + public String processList(final Map model, final Pageable pageable, @RequestParam("bpmnProcessId") Optional bpmnProcessId) { - final long count = processRepository.count(); + if (bpmnProcessId.isPresent()) { + final List processes = new ArrayList<>(); + for (final ProcessEntity processEntity : processRepository.findByBpmnProcessIdStartsWith(bpmnProcessId.get())) { + final ProcessDto dto = toDto(processEntity); + processes.add(dto); + } - final List processes = new ArrayList<>(); - for (final ProcessEntity processEntity : processRepository.findAll(pageable)) { - final ProcessDto dto = toDto(processEntity); - processes.add(dto); - } + model.put("processes", processes); - model.put("processes", processes); - model.put("count", count); + addPaginationToModel(model, Pageable.ofSize(Integer.MAX_VALUE), processes.size()); + addDefaultAttributesToModel(model); + } else { + final long count = processRepository.count(); - addPaginationToModel(model, pageable, count); - addDefaultAttributesToModel(model); + final List processes = new ArrayList<>(); + for (final ProcessEntity processEntity : processRepository.findAll(pageable)) { + final ProcessDto dto = toDto(processEntity); + processes.add(dto); + } + + model.put("processes", processes); + model.put("count", count); + + addPaginationToModel(model, pageable, count); + addDefaultAttributesToModel(model); + } return "process-list-view"; } From 92e99b1697d79372be6de55940af29a19e0ad0be Mon Sep 17 00:00:00 2001 From: Michael Holtermann Date: Tue, 30 Apr 2024 12:43:40 +0200 Subject: [PATCH 2/7] search UI --- .../io/zeebe/monitor/rest/ProcessesViewController.java | 3 +++ src/main/resources/templates/process-list-view.html | 10 +++++++++- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/src/main/java/io/zeebe/monitor/rest/ProcessesViewController.java b/src/main/java/io/zeebe/monitor/rest/ProcessesViewController.java index d6348de7..3b037f93 100644 --- a/src/main/java/io/zeebe/monitor/rest/ProcessesViewController.java +++ b/src/main/java/io/zeebe/monitor/rest/ProcessesViewController.java @@ -72,6 +72,8 @@ public String processList(final Map model, final Pageable pageab } model.put("processes", processes); + model.put("bpmnProcessId", bpmnProcessId.get()); + model.put("count", processes.size()); addPaginationToModel(model, Pageable.ofSize(Integer.MAX_VALUE), processes.size()); addDefaultAttributesToModel(model); @@ -85,6 +87,7 @@ public String processList(final Map model, final Pageable pageab } model.put("processes", processes); + model.remove("bpmnProcessId"); model.put("count", count); addPaginationToModel(model, pageable, count); diff --git a/src/main/resources/templates/process-list-view.html b/src/main/resources/templates/process-list-view.html index 40d705ab..a4d7f879 100644 --- a/src/main/resources/templates/process-list-view.html +++ b/src/main/resources/templates/process-list-view.html @@ -9,6 +9,14 @@ New Deployment +
+ + + +
+
@@ -54,4 +62,4 @@ document.addEventListener('DOMContentLoaded', function(){ listSort('timestamp','process-deployment-time') }, false); - \ No newline at end of file + From 08e41dfee72c1a7ffe68b0b2f9664a0aac094c4f Mon Sep 17 00:00:00 2001 From: Michael Holtermann Date: Tue, 30 Apr 2024 12:44:25 +0200 Subject: [PATCH 3/7] add missing tr --- src/main/resources/templates/process-list-view.html | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/resources/templates/process-list-view.html b/src/main/resources/templates/process-list-view.html index a4d7f879..e658af51 100644 --- a/src/main/resources/templates/process-list-view.html +++ b/src/main/resources/templates/process-list-view.html @@ -25,6 +25,7 @@ + @@ -36,6 +37,7 @@ + {{#processes}} From 1b193de346b4585bcc2d1bacc4c157afe180af32 Mon Sep 17 00:00:00 2001 From: Michael Holtermann Date: Tue, 30 Apr 2024 13:14:05 +0200 Subject: [PATCH 4/7] Transactional is required; otherwise, auto-commit may kick in --- .../java/io/zeebe/monitor/repository/ProcessRepository.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/main/java/io/zeebe/monitor/repository/ProcessRepository.java b/src/main/java/io/zeebe/monitor/repository/ProcessRepository.java index 18defb13..ffaed601 100644 --- a/src/main/java/io/zeebe/monitor/repository/ProcessRepository.java +++ b/src/main/java/io/zeebe/monitor/repository/ProcessRepository.java @@ -20,10 +20,12 @@ import java.util.Collection; import java.util.List; import java.util.Optional; + import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.CrudRepository; import org.springframework.data.repository.PagingAndSortingRepository; import org.springframework.data.repository.query.Param; +import org.springframework.transaction.annotation.Transactional; public interface ProcessRepository extends PagingAndSortingRepository, CrudRepository { @@ -41,5 +43,6 @@ List getElementInstanceStatisticsByKeyAndIntentIn( @Param("intents") Collection intents, @Param("excludeElementTypes") Collection excludeElementTypes); + @Transactional(readOnly = true) List findByBpmnProcessIdStartsWith(String bpmnProcessId); } From d3a394ff94dc10488b3f702688a172ab91679b58 Mon Sep 17 00:00:00 2001 From: Michael Holtermann Date: Mon, 6 May 2024 10:10:22 +0200 Subject: [PATCH 5/7] min length of 3 characters for the search --- src/main/resources/templates/process-list-view.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/templates/process-list-view.html b/src/main/resources/templates/process-list-view.html index e658af51..01011c95 100644 --- a/src/main/resources/templates/process-list-view.html +++ b/src/main/resources/templates/process-list-view.html @@ -13,7 +13,7 @@ - + From 4a2764ea0047d1929ea451fa5b2133f83359345a Mon Sep 17 00:00:00 2001 From: Michael Holtermann Date: Mon, 6 May 2024 10:32:31 +0200 Subject: [PATCH 6/7] min length of 3 characters for the search --- pom.xml | 8 ++++++++ .../io/zeebe/monitor/rest/ProcessesViewController.java | 3 ++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 376c74ec..cd341c79 100644 --- a/pom.xml +++ b/pom.xml @@ -29,6 +29,8 @@ 5.3.6 + 8.0.1.Final + 17 ${version.java} @@ -198,6 +200,12 @@ mysql-connector-j + + org.hibernate.validator + hibernate-validator + ${version.hibernate.validator} + + diff --git a/src/main/java/io/zeebe/monitor/rest/ProcessesViewController.java b/src/main/java/io/zeebe/monitor/rest/ProcessesViewController.java index 3b037f93..799bf21f 100644 --- a/src/main/java/io/zeebe/monitor/rest/ProcessesViewController.java +++ b/src/main/java/io/zeebe/monitor/rest/ProcessesViewController.java @@ -35,6 +35,7 @@ import java.util.Map; import java.util.Optional; import java.util.stream.Collectors; +import jakarta.validation.constraints.Size; import org.camunda.bpm.model.xml.instance.ModelElementInstance; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Pageable; @@ -62,7 +63,7 @@ public String index(final Map model, final Pageable pageable) { } @GetMapping("/views/processes") - public String processList(final Map model, final Pageable pageable, @RequestParam("bpmnProcessId") Optional bpmnProcessId) { + public String processList(final Map model, final Pageable pageable, @RequestParam("bpmnProcessId") Optional<@Size(min = 3) String> bpmnProcessId) { if (bpmnProcessId.isPresent()) { final List processes = new ArrayList<>(); From 6aafad1d25c125e1fc6b1d8ee141b1e655b8580b Mon Sep 17 00:00:00 2001 From: nitram509 Date: Fri, 27 Dec 2024 12:04:36 +0100 Subject: [PATCH 7/7] fix issue with validation error thrown, when searching for just two characters improve css styling --- .../monitor/rest/ProcessesViewController.java | 7 +++---- .../resources/templates/process-list-view.html | 15 +++++++-------- 2 files changed, 10 insertions(+), 12 deletions(-) diff --git a/src/main/java/io/zeebe/monitor/rest/ProcessesViewController.java b/src/main/java/io/zeebe/monitor/rest/ProcessesViewController.java index 799bf21f..b12a8eb3 100644 --- a/src/main/java/io/zeebe/monitor/rest/ProcessesViewController.java +++ b/src/main/java/io/zeebe/monitor/rest/ProcessesViewController.java @@ -35,7 +35,6 @@ import java.util.Map; import java.util.Optional; import java.util.stream.Collectors; -import jakarta.validation.constraints.Size; import org.camunda.bpm.model.xml.instance.ModelElementInstance; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Pageable; @@ -63,9 +62,9 @@ public String index(final Map model, final Pageable pageable) { } @GetMapping("/views/processes") - public String processList(final Map model, final Pageable pageable, @RequestParam("bpmnProcessId") Optional<@Size(min = 3) String> bpmnProcessId) { + public String processList(final Map model, final Pageable pageable, @RequestParam(value = "bpmnProcessId", required = false) Optional bpmnProcessId) { - if (bpmnProcessId.isPresent()) { + if (bpmnProcessId.isPresent() && bpmnProcessId.get().length() >= 3) { final List processes = new ArrayList<>(); for (final ProcessEntity processEntity : processRepository.findByBpmnProcessIdStartsWith(bpmnProcessId.get())) { final ProcessDto dto = toDto(processEntity); @@ -88,7 +87,7 @@ public String processList(final Map model, final Pageable pageab } model.put("processes", processes); - model.remove("bpmnProcessId"); + model.put("bpmnProcessId", ""); model.put("count", count); addPaginationToModel(model, pageable, count); diff --git a/src/main/resources/templates/process-list-view.html b/src/main/resources/templates/process-list-view.html index 01011c95..ba208572 100644 --- a/src/main/resources/templates/process-list-view.html +++ b/src/main/resources/templates/process-list-view.html @@ -9,17 +9,16 @@ New Deployment -
- - - + +
+ + +
+ - -
+
{{count}} process definitions
Process Definition Key BPMN process id Version