camunda-community-hub / zeeqs Goto Github PK
View Code? Open in Web Editor NEWGraphQL API for Zeebe data
License: Apache License 2.0
GraphQL API for Zeebe data
License: Apache License 2.0
Using the GraphQL API, I can subscribe for updates of workflows:
GraphQL's subscriptions should be suitable for this.
Using @Enumerated(EnumType.STRING)
on enum fields leads to more meaningful data in the database.
It is much easier to debug something in the database when you can read "ACTIVATED" instead of 0
Would you consider changing to strings ?
I could implement a PR that does the change, and provides a SQL script to migrate the schema and data.
Hello everyone !
I am trying to run ZeeQS with Hazelcast and Postgresql in Kubernetes.
I first tried to run this Dockerfile :
version: "2"
networks:
zeebe_network:
driver: bridge
services:
zeebe:
container_name: zeebe_broker
image: camunda/zeebe:1.2.3
environment:
- ZEEBE_LOG_LEVEL=debug
ports:
- "26500:26500"
- "9600:9600"
- "5701:5701"
volumes:
- ../target/exporter/zeebe-hazelcast-exporter.jar:/usr/local/zeebe/exporters/zeebe-hazelcast-exporter.jar
- ./application.yaml:/usr/local/zeebe/config/application.yaml
networks:
- zeebe_network
zeeqs:
container_name: zeeqs
image: ghcr.io/camunda-community-hub/zeeqs:2.1.0
environment:
- zeebe.client.worker.hazelcast.connection=zeebe:5701
- spring.datasource.url=jdbc:postgresql://db:5432/postgres
- spring.datasource.username=postgres
- spring.datasource.password=zeebe
- spring.datasource.driverClassName=org.postgresql.Driver
- spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect
volumes:
- ./lib/postgresql-42.2.12.jar:/app/libs/postgresql-42.2.12.jar
ports:
- "9000:9000"
depends_on:
- db
networks:
- zeebe_network
db:
image: postgres:12.2
restart: always
environment:
POSTGRES_PASSWORD: zeebe
volumes:
- database-data:/var/lib/postgresql/data/
networks:
- zeebe_network
volumes:
database-data:
I have this error from Postgresql :
db_1 | 2021-11-29 18:08:01.484 UTC [33] ERROR: relation "hazelcast_config" does not exist at character 82
db_1 | 2021-11-29 18:08:01.484 UTC [33] STATEMENT: select hazelcastc0_.id as id1_3_0_, hazelcastc0_.sequence as sequence2_3_0_ from hazelcast_config hazelcastc0_ where hazelcastc0_.id=$1
And from ZeeQS :
zeeqs | 2021-11-29 18:08:01.499 WARN 1 --- [ main] o.h.engine.jdbc.spi.SqlExceptionHelper : SQL Error: 0, SQLState: 42P01
zeeqs | 2021-11-29 18:08:01.500 ERROR 1 --- [ main] o.h.engine.jdbc.spi.SqlExceptionHelper : ERROR: relation "hazelcast_config" does not exist
zeeqs | Position: 82
zeeqs | 2021-11-29 18:08:01.510 INFO 1 --- [ main] o.h.e.internal.DefaultLoadEventListener : HHH000327: Error performing load command
zeeqs |
zeeqs | org.hibernate.exception.SQLGrammarException: could not extract ResultSet
...
zeeqs | Caused by: org.postgresql.util.PSQLException: ERROR: relation "hazelcast_config" does not exist
There is a missing relation in Postgresql
Support querying completed workflow instances by datetime range. e.g. For processes and variables on a particular day.
{
processInstances (stateIn: [COMPLETED], minStartTime: "2021-11-02T00:00:00.000Z", maxEndTime: "2021-11-02T23:59:59.999Z") {
nodes {
state
startTime
endTime
variables {
name
value
}
}
}
}
If ZeeQS imports records from a Zeebe cluster with multiple partitions then it can happen that variable updates, element instance transitions, and message correlations are not persisted.
The problem is caused by the importer. It uses the record position as ID for the entities. But the positions are not unique across multiple partitions.
Related issue: camunda-community-hub/zeebe-simple-monitor#278
In case, that an unexpected error happens (e.g. during the workflow processing) then an error record is written. This can contain useful information for root cause (e.g. if an instance is was added to the blacklist).
AT:
You can get the timers of a process. Currently, it returns all timers that belong to the process, including timers from timer start events and intermediate timer events. It is expected that it returns only the timers from the root timer start events but not from intermediate events. The behavior should be aligned with message subscriptions of a process.
https://hub.docker.com/r/camunda/zeeqs/tags?page=1&ordering=last_updated
Could you please provide it so that we can update the Helm charts?
Support querying workflow instances by specific variables names & values.
Hi Team,
I have used the Zeeqs application to connect to PostgreSQL Db using the below configurations.
Zeebe Setup([Version 0.23.2]One broker One Standalone Gateway) with Zeebe-hazelcast-exporter(0.9.0) and Zeeqs(image- zeeqs:latest) deployed on kubernetes cluster using helm charts in same namespace
The application was working fine (as expected) before it threw the following Error , after which there are NO Traces/Logs
2020-07-23 11:20:04.426 ERROR 1 --- [pool-1-thread-1] o.h.engine.jdbc.spi.SqlExceptionHelper : ERROR: value too long for type character varying(255)
Hazelcast exporter receives the data and pushes to H2 database, as we see the changes in Simple Monitor. But the same is not reflected through Zeeqs. It does not capture inputs into Database.
The Error thrown is not very specific as to which Table and Field.
On trying to replicate, we noticed :
2020-08-10T12:40:38.448886336Z 2020-08-10 12:40:38.448 WARN 1 --- [pool-1-thread-1] o.h.engine.jdbc.spi.SqlExceptionHelper : SQL Error: 0, SQLState: 22001
2020-08-10T12:40:38.448927509Z 2020-08-10 12:40:38.448 ERROR 1 --- [pool-1-thread-1] o.h.engine.jdbc.spi.SqlExceptionHelper : ERROR: value too long for type character varying(255)
Hello!
My colleague has a problem when he is running spec tests on his M1 Mac. Sometimes ZeeQS container hangs out on the Spring Data JPA's repositories scanning phase.
So, I build the multiplatform ZeeQS image using the jib in the ZeeQS repo: https://github.com/users/aivinog1/packages/container/package/zeeqs. We have tested it and it works fine (no one hanging so far). So, I would like to add this support to the ZeeQS.
Hey!
I think we can simplify the first-look example by adding the Hazelcast JDBC Driver and switch to this by default in examples (since we obviously have Hazelcast in our environment because we import data from it). WDYT? I can propose a PR to see how it looks.
ZeeQS 1.0.0-alpha5 docker image.
PostgreSQL 13.1
I want to get the variables of a completed workflow instance :
query {
workflowInstance (key: 2251799813916461) {
state
variables {
name
value
}
}
}
But I get :
{
"errors": [
{
"message": "Internal Server Error(s) while executing query"
}
],
"data": {
"workflowInstance": {
"state": "COMPLETED",
"variables": null
}
}
}
Searching in the database, I do not find my variables values, there is only numbers in the value column of the variables table...
Is your feature request related to a problem? Please describe.
I want to see the evaluations of a decision. The evaluation contains all data of the evaluated decision, for example, the matched rules of a decision table.
Describe the solution you'd like
Describe alternatives you've considered
None.
Additional context
Requires camunda-community-hub/zeebe-hazelcast-exporter#215
Requires #285
I have a Zeebe broker that streams data to a PostgreSQL DB through Zeeqs/Hazelcast.
It seems that events are not always recorded as they actually happened; in other words, the order of events does not seem to be always guaranteed. Here is a screenshot of my PostgreSQL:
The chat-message event has happened after all other events/variables. Also, between every two chat-message there must always be a userInputText and a watsonResponse; yet, this is not the case as you can see in the chunk shown in the screen. This is not the only case I spotted; there are othersβ¦
Could you please let me know if Zeeqs guarantees the order of events as they actually occurred in reality?
Thank you,
Thank you for this awesome extension to Camunda! I am currently using the in-memory profile from the docker-compose.yml
however, GraphiQL seems to be disabled as I receive a 400 when executing a GET request. Is there an environment variable or application config option to enable GraphiQL?
zeeqs | 2022-09-05 09:53:01.290 INFO 1 --- [nio-9000-exec-2] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring DispatcherServlet 'dispatcherServlet'
zeeqs | 2022-09-05 09:53:01.291 INFO 1 --- [nio-9000-exec-2] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet'
zeeqs | 2022-09-05 09:53:01.292 INFO 1 --- [nio-9000-exec-2] o.s.web.servlet.DispatcherServlet : Completed initialization in 1 ms
zeeqs | 2022-09-05 09:53:24.249 INFO 1 --- [nio-9000-exec-3] g.k.servlet.HttpRequestHandlerImpl : Bad request: cannot handle http request
zeeqs |
zeeqs | graphql.GraphQLException: Query parameter not found in GET request
zeeqs | at graphql.kickstart.servlet.GraphQLGetInvocationInputParser.getGraphQLInvocationInput(GraphQLGetInvocationInputParser.java:36) ~[graphql-java-servlet-10.1.0.jar:na]
zeeqs | at graphql.kickstart.servlet.HttpRequestHandlerImpl.handle(HttpRequestHandlerImpl.java:38) ~[graphql-java-servlet-10.1.0.jar:na]
zeeqs | at graphql.kickstart.servlet.AbstractGraphQLHttpServlet.doRequest(AbstractGraphQLHttpServlet.java:82) ~[graphql-java-servlet-10.1.0.jar:na]
zeeqs | at graphql.kickstart.servlet.AbstractGraphQLHttpServlet.doGet(AbstractGraphQLHttpServlet.java:69) ~[graphql-java-servlet-10.1.0.jar:na]
zeeqs | at javax.servlet.http.HttpServlet.service(HttpServlet.java:645) ~[javax.servlet-api-4.0.1.jar:4.0.1]
zeeqs | at javax.servlet.http.HttpServlet.service(HttpServlet.java:750) ~[javax.servlet-api-4.0.1.jar:4.0.1]
zeeqs | at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227) ~[tomcat-embed-core-9.0.62.jar:9.0.62]
zeeqs | at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.62.jar:9.0.62]
zeeqs | at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) ~[tomcat-embed-websocket-9.0.62.jar:9.0.62]
zeeqs | at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[tomcat-embed-core-9.0.62.jar:9.0.62]
zeeqs | at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.62.jar:9.0.62]
zeeqs | at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:91) ~[spring-web-5.3.19.jar:5.3.19]
zeeqs | at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.19.jar:5.3.19]
zeeqs | at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[tomcat-embed-core-9.0.62.jar:9.0.62]
zeeqs | at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.62.jar:9.0.62]
zeeqs | at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) ~[spring-web-5.3.19.jar:5.3.19]
zeeqs | at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.19.jar:5.3.19]
zeeqs | at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[tomcat-embed-core-9.0.62.jar:9.0.62]
zeeqs | at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.62.jar:9.0.62]
zeeqs | at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) ~[spring-web-5.3.19.jar:5.3.19]
zeeqs | at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.19.jar:5.3.19]
zeeqs | at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[tomcat-embed-core-9.0.62.jar:9.0.62]
zeeqs | at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.62.jar:9.0.62]
zeeqs | at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:96) ~[spring-boot-actuator-2.6.7.jar:2.6.7]
zeeqs | at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.19.jar:5.3.19]
zeeqs | at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[tomcat-embed-core-9.0.62.jar:9.0.62]
zeeqs | at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.62.jar:9.0.62]
zeeqs | at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) ~[spring-web-5.3.19.jar:5.3.19]
zeeqs | at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.19.jar:5.3.19]
zeeqs | at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[tomcat-embed-core-9.0.62.jar:9.0.62]
zeeqs | at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.62.jar:9.0.62]
zeeqs | at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:197) ~[tomcat-embed-core-9.0.62.jar:9.0.62]
zeeqs | at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97) ~[tomcat-embed-core-9.0.62.jar:9.0.62]
zeeqs | at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:541) ~[tomcat-embed-core-9.0.62.jar:9.0.62]
zeeqs | at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:135) ~[tomcat-embed-core-9.0.62.jar:9.0.62]
zeeqs | at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) ~[tomcat-embed-core-9.0.62.jar:9.0.62]
zeeqs | at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78) ~[tomcat-embed-core-9.0.62.jar:9.0.62]
zeeqs | at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:360) ~[tomcat-embed-core-9.0.62.jar:9.0.62]
zeeqs | at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:399) ~[tomcat-embed-core-9.0.62.jar:9.0.62]
zeeqs | at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) ~[tomcat-embed-core-9.0.62.jar:9.0.62]
zeeqs | at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:890) ~[tomcat-embed-core-9.0.62.jar:9.0.62]
zeeqs | at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1743) ~[tomcat-embed-core-9.0.62.jar:9.0.62]
zeeqs | at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) ~[tomcat-embed-core-9.0.62.jar:9.0.62]
zeeqs | at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) ~[tomcat-embed-core-9.0.62.jar:9.0.62]
zeeqs | at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) ~[tomcat-embed-core-9.0.62.jar:9.0.62]
zeeqs | at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) ~[tomcat-embed-core-9.0.62.jar:9.0.62]
zeeqs | at java.base/java.lang.Thread.run(Unknown Source) ~[na:na]
zeeqs |
zeeqs | 2022-09-05 09:53:24.250 ERROR 1 --- [nio-9000-exec-3] g.k.servlet.AbstractGraphQLHttpServlet : Error executing GraphQL request!
zeeqs |
zeeqs | graphql.GraphQLException: Query parameter not found in GET request
zeeqs | at graphql.kickstart.servlet.GraphQLGetInvocationInputParser.getGraphQLInvocationInput(GraphQLGetInvocationInputParser.java:36) ~[graphql-java-servlet-10.1.0.jar:na]
zeeqs | at graphql.kickstart.servlet.HttpRequestHandlerImpl.handle(HttpRequestHandlerImpl.java:38) ~[graphql-java-servlet-10.1.0.jar:na]
zeeqs | at graphql.kickstart.servlet.AbstractGraphQLHttpServlet.doRequest(AbstractGraphQLHttpServlet.java:82) ~[graphql-java-servlet-10.1.0.jar:na]
zeeqs | at graphql.kickstart.servlet.AbstractGraphQLHttpServlet.doGet(AbstractGraphQLHttpServlet.java:69) ~[graphql-java-servlet-10.1.0.jar:na]
zeeqs | at javax.servlet.http.HttpServlet.service(HttpServlet.java:645) ~[javax.servlet-api-4.0.1.jar:4.0.1]
zeeqs | at javax.servlet.http.HttpServlet.service(HttpServlet.java:750) ~[javax.servlet-api-4.0.1.jar:4.0.1]
zeeqs | at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227) ~[tomcat-embed-core-9.0.62.jar:9.0.62]
zeeqs | at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.62.jar:9.0.62]
zeeqs | at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) ~[tomcat-embed-websocket-9.0.62.jar:9.0.62]
zeeqs | at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[tomcat-embed-core-9.0.62.jar:9.0.62]
zeeqs | at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.62.jar:9.0.62]
zeeqs | at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:91) ~[spring-web-5.3.19.jar:5.3.19]
zeeqs | at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.19.jar:5.3.19]
zeeqs | at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[tomcat-embed-core-9.0.62.jar:9.0.62]
zeeqs | at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.62.jar:9.0.62]
zeeqs | at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) ~[spring-web-5.3.19.jar:5.3.19]
zeeqs | at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.19.jar:5.3.19]
zeeqs | at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[tomcat-embed-core-9.0.62.jar:9.0.62]
zeeqs | at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.62.jar:9.0.62]
zeeqs | at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) ~[spring-web-5.3.19.jar:5.3.19]
zeeqs | at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.19.jar:5.3.19]
zeeqs | at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[tomcat-embed-core-9.0.62.jar:9.0.62]
zeeqs | at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.62.jar:9.0.62]
zeeqs | at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:96) ~[spring-boot-actuator-2.6.7.jar:2.6.7]
zeeqs | at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.19.jar:5.3.19]
zeeqs | at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[tomcat-embed-core-9.0.62.jar:9.0.62]
zeeqs | at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.62.jar:9.0.62]
zeeqs | at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) ~[spring-web-5.3.19.jar:5.3.19]
zeeqs | at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.19.jar:5.3.19]
zeeqs | at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[tomcat-embed-core-9.0.62.jar:9.0.62]
zeeqs | at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.62.jar:9.0.62]
zeeqs | at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:197) ~[tomcat-embed-core-9.0.62.jar:9.0.62]
zeeqs | at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97) ~[tomcat-embed-core-9.0.62.jar:9.0.62]
zeeqs | at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:541) ~[tomcat-embed-core-9.0.62.jar:9.0.62]
zeeqs | at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:135) ~[tomcat-embed-core-9.0.62.jar:9.0.62]
zeeqs | at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) ~[tomcat-embed-core-9.0.62.jar:9.0.62]
zeeqs | at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78) ~[tomcat-embed-core-9.0.62.jar:9.0.62]
zeeqs | at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:360) ~[tomcat-embed-core-9.0.62.jar:9.0.62]
zeeqs | at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:399) ~[tomcat-embed-core-9.0.62.jar:9.0.62]
zeeqs | at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) ~[tomcat-embed-core-9.0.62.jar:9.0.62]
zeeqs | at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:890) ~[tomcat-embed-core-9.0.62.jar:9.0.62]
zeeqs | at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1743) ~[tomcat-embed-core-9.0.62.jar:9.0.62]
zeeqs | at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) ~[tomcat-embed-core-9.0.62.jar:9.0.62]
zeeqs | at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) ~[tomcat-embed-core-9.0.62.jar:9.0.62]
zeeqs | at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) ~[tomcat-embed-core-9.0.62.jar:9.0.62]
zeeqs | at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) ~[tomcat-embed-core-9.0.62.jar:9.0.62]
zeeqs | at java.base/java.lang.Thread.run(Unknown Source) ~[na:na]
zeeqs |
Querying the endpoint with a POST works perfectly by the way π
We could improve the tests for GraphQL by using the Spring test harness. See the docs for details.
Hi,
Zeeqs can query current insert data only, When i'm restart zeeqs service it can't query exist(old active) data in cluster. But will create new instance and query using zeeqs, it ability to query and show it.
Therefore
I have a few questions on zeeqs architecture
Thanks.
At the moment I am pulling the whole process XML to get element Documentation
.
How difficult would be to add bpmn:documentation
into BpmnElement
?
Thanks
An element instance contains a list of meta-information from the workflow
Hey,
I think that when JobRecord intent is CREATE the value of record.Metadata.Key is set to -1 (at least that's the case with broker 0.22.2, not sure if it's a bug or as expected)
I think that this will cause JPA to create a record with -1 as ID.
Maybe you should filter jobs when key = -1,
note: this is true for other entities such incidents & messages
Thanks,
Asaf.
Hey,
Few things related to production:
workflowInstance(states:[ACTIVATED]) {
...
}
// or
workflowInstance(stateIn:[COMPLETED,TERMINATED]) {
...
}
The GraphQL queries support pagination of the result. Currently, it uses the parameters limit: 10
and page: 0
. But the parameter limit
is not so common and it is not intuitive. It defines the items per page.
limit
with perPage
In order to support different namespaces/domains (i.e. multi-tenancy), we need a way to store the data based on the namespace and be able to query by the namespace This can be useful to collect data from multiple environments (e.g. dev/stage/prod) by a single consumer, especially, for building a testing tool and running multiple test cases.
Each data entity (e.g. processes, process instances, jobs, etc.) contains a new field for the namespace.
The importer sets the namespace when reading exported records.
The GraphQL queries contain an optional field to filter by the namespace.
Related to/depends on camunda-community-hub/zeebe-hazelcast-exporter#132.
On starting zeeqs with postgres db (docker-compose file) the log file is filled up with errors -
Caused by: org.postgresql.util.PSQLException: ERROR: invalid byte sequence for encoding "UTF8": 0x00
(complete log file is shared here).
On submitting the process definition to zeebe we sometimes get null values in the api response instead of the process instance information. The process definition retured is also null. Linked are the screenshots of the graphql requests made through postman client.
On a slack discussion here, the issue was reproduced when running zeeqs with postgres.
Look into https://github.com/Netflix/dgs-framework and evaluate if it fits better for this project.
Is your feature request related to a problem? Please describe.
I want to fetch the deployed decisions and related decision requirements. Similarly, to the deployed processes.
Describe the solution you'd like
Describe alternatives you've considered
None.
Additional context
Requires camunda-community-hub/zeebe-hazelcast-exporter#214
The helm charts have been removed from https://github.com/camunda-community-hub/camunda-cloud-helm in order to further provide helm charts they need to be hosted somewhere else, e.g. directly in this repository.
Attaching the sources here so they can easily be added
ZeeQS exposes its data as a GraphQL API. This is great for applications that want to query Zeebe's data programmatically. I believe it might also be useful to offer this data through a command-line interface.
For example:
zeeqs workflows
Could output generally interesting data about the currently deployed workflows, e.g. similar to the GraphQL query:
{
workflows {
totalCount
nodes {
key
bpmnProcessId
version
workflowInstances {
totalCount
}
}
}
}
{
"data": {
"workflows": {
"totalCount": 3,
"nodes": [
{
"key": "2251799813685249",
"bpmnProcessId": "demo-process",
"version": 1,
"workflowInstances": {
"totalCount": 3
}
},
{
"key": "2251799813685251",
"bpmnProcessId": "demo-2",
"version": 1,
"workflowInstances": {
"totalCount": 2
}
},
{
"key": "2251799813685269",
"bpmnProcessId": "demo-3",
"version": 1,
"workflowInstances": {
"totalCount": 1
}
}
]
}
}
}
A potential use-case I see is to quickly query for Zeebe data during local development.
I've created a draft PR to show what this could look like in #40. I would like to validate whether this is something the community would like to use, before I continue to develop this idea further.
Do you see potential in a tool like this? Please comment or π / π on this issue.
When a timer of a timer start event is triggered then it should link to the process instance. Currently, the process instance is always null
, even if the timer triggered and created a new process instance.
We could improve the performance of GraphQL by using batch loading. See the docs for defails.
Hey,
Since timers are overridden, it's currently impossible to know the amount of time took for a timer to complete its work,
Adding timer. creationTime in createTimer can help.
I really need a Dockerfile to be able to add the Postgres jar file and in general build a new image. But for some reason there is no such thing in the repo.
Can you please assist?
Using the GraphQL API, I can subscribe for updates of a specific workflow instance (e.g. new element instance, a new variable, a new incident, etc.).
GraphQL's subscriptions should be suitable for this.
I can access the following static properties of a user task.
Extend the GraphQL API to expose these properties as element metadata.
Hey there, I noticed in https://github.com/camunda-community-hub/zeeqs/blob/master/docs/ZeeQS.png there's reference to being able to use an elasticsearch exporter as input to ZeeQS. Is this currently supported at all? How much of an undertaking, in your estimation, would it be support ES?
In Zeebe, user tasks are a special kind of task. They are similar to other tasks but have a few special properties. And they should be completed by users, in form of a user task application (e.g. Tasklist).
We should handle user tasks as first-class citizens.
created
or completed
)See the GraphQL best practices: https://graphql.org/learn/pagination/
The query
{
workflowInstances(page: 0, perPage: 20) {
totalCount
nodes {
key
}
}
}
yield:
{
"errors": [
{
"message": "Validation error of type UnknownArgument: Unknown field argument perPage @ 'workflowInstances'",
"locations": [
{
"line": 2,
"column": 30
}
],
"extensions": {
"classification": "ValidationError"
}
}
],
"data": null
}
Changing "perPage" parameter into "limit" does yield to correct result. It might be good to change to "Pagination Section" in the README.md to include a working ##example.
First of all: great community project.
While evaluating a solution that replaces the Hazelcast exporter/importer with a Kafka based solution, I found the following entities using the position as the primary key:
As far as I know, the position is unique per partition, which would mean that the key is not unique when multiple partitions are used. Shouldn't this be a compound key then ?
For example for VariableUpdate, position+variableKey should be always unique.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
π Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. πππ
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google β€οΈ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.