├── .github ├── release-drafter.yml └── workflows │ ├── event-schemas-api.maven.yml │ ├── quarkus-backend.maven.yml │ ├── quarkus-business-app.maven.yml │ ├── quarkus-dashboard.maven.yml │ ├── quarkus-streaming.maven.yml │ ├── release-drafter.yml │ └── update-changelog.yml ├── .gitignore ├── 00-ocp-utils.sh ├── 01-deploy-infra.sh ├── 01-operators ├── README.md ├── cluster-wide │ ├── amq-streams-subscription.yml │ ├── datagrid-subscription.yml │ ├── serverless-operator-subscription.yaml │ └── service-registry-operator-subscription.yml └── namespace-wide │ ├── grafana-operator-subscription.yaml │ ├── operator-group.yaml │ └── prometheus-operator-subscription.yaml ├── 02-load-enterprise-data.sh ├── 02-metrics ├── README.md ├── grafana │ ├── dashboards │ │ ├── grafana-dashboard-strimzi-cruise-control.yaml │ │ ├── grafana-dashboard-strimzi-kafka-connect.yaml │ │ ├── grafana-dashboard-strimzi-kafka-exporter.yaml │ │ ├── grafana-dashboard-strimzi-kafka.yaml │ │ ├── grafana-dashboard-strimzi-operators.yaml │ │ └── grafana-dashboard-strimzi-zookeeper.yaml │ └── grafana.yaml └── prometheus │ ├── alert-manager.yaml │ ├── dashboard-service-monitor.yaml │ ├── prometheus-additional.yaml │ ├── prometheus-rules.yaml │ ├── prometheus.yaml │ ├── strimzi-pod-monitor.yaml │ └── strimzi-service-monitor.yaml ├── 03-databases ├── README.md └── mysql │ ├── enterprise │ ├── Dockerfile │ ├── data │ │ ├── enterprise-data.sql │ │ ├── enterprise-query.sql │ │ └── enterprise.sql │ └── mysql.cnf │ └── inventory │ ├── Dockerfile │ ├── data │ └── inventory.sql │ └── mysql.cnf ├── 04-kafka ├── README.md ├── kafka │ ├── configmap │ │ ├── cruise-control-metrics.yaml │ │ └── kafka-metrics.yml │ └── event-bus-kafka.yml └── topics │ ├── data │ ├── eda-data-accounts-topic.yml │ ├── eda-data-clients-topic.yml │ ├── eda-data-movements-topic.yml │ └── eda-data-regions-topic.yml │ ├── domain │ ├── eda-events-domain-accounts-balance-low-reached-topic.yml │ ├── eda-events-domain-accounts-balance-neg-reached-topic.yml │ ├── eda-events-domain-accounts-balance-vip-reached-topic.yml │ ├── eda-events-domain-accounts-topic.yml │ ├── eda-events-domain-clients-accounts-closed-topic.yml │ ├── eda-events-domain-clients-accounts-inactivated-topic.yml │ ├── eda-events-domain-clients-topic.yml │ └── eda-events-domain-regions-topic.yml │ ├── eda-events-clients-created-topic.yml │ ├── eda-streaming-accounts-latest-topic.yml │ └── events │ ├── eda-events-aggregate-metrics-topic.yml │ └── eda-events-alerts-topic.yml ├── 05-deploy-apps.sh ├── 05-service-registry ├── README.md └── apicurio-registry.yaml ├── 06-kafka-connect ├── README.md ├── configmap │ └── connect-metrics.yaml ├── connectors │ └── file-source-connector.yml ├── debezium-mysql │ ├── mysql-enterprise-source-connector.yaml │ └── mysql-inventory-source-connector.yaml ├── eda-kafka-connect-is.yaml ├── eda-kafka-connect.yaml └── topics │ ├── kafka-connect-cluster-configs-topic.yml │ ├── kafka-connect-cluster-offsets-topic.yml │ └── kafka-connect-cluster-status-topic.yml ├── 07-datagrid ├── README.md ├── caches │ ├── aggregate-metrics-cache.yaml │ ├── alerts-cache.yaml │ ├── clients-cache.yaml │ └── regions-cache.yaml ├── eda-infinispan.yaml └── secrets │ ├── eda-infinispan-cache-credentials-secret.yaml │ └── eda-infinispan-credentials-secret.yaml ├── 08-quarkus-business-app ├── .dockerignore ├── .gitignore ├── .mvn │ └── wrapper │ │ ├── MavenWrapperDownloader.java │ │ ├── maven-wrapper.jar │ │ └── maven-wrapper.properties ├── .s2i │ └── environment ├── README.md ├── mvnw ├── mvnw.cmd ├── pom.xml └── src │ ├── main │ ├── docker │ │ ├── Dockerfile.jvm │ │ ├── Dockerfile.legacy-jar │ │ ├── Dockerfile.native │ │ └── Dockerfile.native-micro │ ├── java │ │ └── com │ │ │ └── redhat │ │ │ └── banking │ │ │ └── enterprise │ │ │ ├── BusinessProducerResource.java │ │ │ ├── entities │ │ │ ├── Account.java │ │ │ ├── AccountStatusEnum.java │ │ │ ├── Client.java │ │ │ ├── Movement.java │ │ │ ├── MovementTypeEnum.java │ │ │ └── Region.java │ │ │ ├── repositories │ │ │ ├── AccountRepository.java │ │ │ ├── ClientRepository.java │ │ │ ├── MovementRepository.java │ │ │ └── RegionRepository.java │ │ │ └── schedulers │ │ │ ├── ClientScheduler.java │ │ │ └── MovementScheduler.java │ └── resources │ │ ├── META-INF │ │ └── resources │ │ │ └── index.html │ │ └── application.properties │ └── test │ └── java │ └── com │ └── redhat │ └── banking │ └── enterprise │ ├── BusinessProducerResourceTest.java │ └── NativeBusinessProducerResourceIT.java ├── 09-event-schemas-api ├── .gitignore ├── .mvn │ └── wrapper │ │ ├── MavenWrapperDownloader.java │ │ ├── maven-wrapper.jar │ │ └── maven-wrapper.properties ├── README.md ├── mvnw ├── mvnw.cmd ├── pom.xml └── src │ └── main │ ├── avro │ └── com │ │ └── redhat │ │ └── banking │ │ └── eda │ │ └── model │ │ └── events │ │ ├── AggregateMetric.avsc │ │ ├── Alert.avsc │ │ ├── accounts │ │ ├── AccountBalanceLOWReached.avsc │ │ ├── AccountBalanceNEGReached.avsc │ │ └── AccountBalanceVIPReached.avsc │ │ └── clients │ │ ├── ClientAccountsClosed.avsc │ │ └── ClientAccountsInactivated.avsc │ ├── docker │ ├── Dockerfile.jvm │ ├── Dockerfile.legacy-jar │ ├── Dockerfile.native │ └── Dockerfile.native-distroless │ ├── java │ └── com │ │ └── redhat │ │ └── eda │ │ └── model │ │ ├── AggregateMetric.java │ │ ├── Alert.java │ │ └── AlertVariant.java │ └── resources │ └── application.properties ├── 10-deploy-serverless-services.sh ├── 10-quarkus-streaming ├── .gitignore ├── .mvn │ └── wrapper │ │ ├── MavenWrapperDownloader.java │ │ ├── maven-wrapper.jar │ │ └── maven-wrapper.properties ├── .s2i │ └── environment ├── README.md ├── mvnw ├── mvnw.cmd ├── pom.xml └── src │ ├── main │ ├── avro │ │ └── com │ │ │ └── redhat │ │ │ └── banking │ │ │ └── eda │ │ │ └── model │ │ │ └── events │ │ │ ├── AggregateMetric.avsc │ │ │ ├── Alert.avsc │ │ │ ├── accounts │ │ │ ├── AccountBalanceLOWReached.avsc │ │ │ ├── AccountBalanceNEGReached.avsc │ │ │ └── AccountBalanceVIPReached.avsc │ │ │ └── clients │ │ │ ├── ClientAccountsClosed.avsc │ │ │ └── ClientAccountsInactivated.avsc │ ├── docker │ │ ├── Dockerfile.jvm │ │ ├── Dockerfile.legacy-jar │ │ ├── Dockerfile.native │ │ └── Dockerfile.native-micro │ ├── java │ │ └── com │ │ │ └── redhat │ │ │ └── banking │ │ │ └── eda │ │ │ ├── CloudEventResource.java │ │ │ ├── DataStreamingResource.java │ │ │ ├── cdc │ │ │ ├── converters │ │ │ │ ├── AccountDBConverter.java │ │ │ │ ├── ClientDBConverter.java │ │ │ │ ├── MovementDBConverter.java │ │ │ │ └── RegionDBConverter.java │ │ │ ├── model │ │ │ │ ├── AccountDB.java │ │ │ │ ├── ClientDB.java │ │ │ │ ├── MovementDB.java │ │ │ │ └── RegionDB.java │ │ │ └── serde │ │ │ │ ├── AccountDBDeserializer.java │ │ │ │ ├── ClientDBDeserializer.java │ │ │ │ ├── MovementDBDeserializer.java │ │ │ │ └── RegionDBDeserializer.java │ │ │ └── streams │ │ │ ├── StreamTopologyProducer.java │ │ │ └── model │ │ │ ├── Account.java │ │ │ ├── AccountAndClient.java │ │ │ ├── AccountAndRegion.java │ │ │ ├── AccountWithMovements.java │ │ │ ├── Client.java │ │ │ ├── ClientWithAccounts.java │ │ │ ├── Movement.java │ │ │ ├── MovementAndAccount.java │ │ │ ├── Region.java │ │ │ └── RegionWithAccounts.java │ └── resources │ │ └── application.properties │ └── test │ └── java │ └── com │ └── redhat │ └── banking │ └── eda │ ├── CloudEventResourceTest.java │ ├── DataStreamingResourceTest.java │ ├── NativeCloudEventResourceIT.java │ └── NativeDataStreamingResourceIT.java ├── 11-quarkus-backend ├── .gitignore ├── .mvn │ └── wrapper │ │ ├── MavenWrapperDownloader.java │ │ ├── maven-wrapper.jar │ │ └── maven-wrapper.properties ├── .s2i │ └── environment ├── README.md ├── mvnw ├── mvnw.cmd ├── pom.xml └── src │ ├── main │ ├── avro │ │ └── com │ │ │ └── redhat │ │ │ └── banking │ │ │ └── eda │ │ │ └── model │ │ │ └── events │ │ │ ├── AggregateMetric.avsc │ │ │ ├── Alert.avsc │ │ │ ├── accounts │ │ │ ├── AccountBalanceLOWReached.avsc │ │ │ ├── AccountBalanceNEGReached.avsc │ │ │ └── AccountBalanceVIPReached.avsc │ │ │ └── clients │ │ │ ├── ClientAccountsClosed.avsc │ │ │ └── ClientAccountsInactivated.avsc │ ├── docker │ │ ├── Dockerfile.jvm │ │ ├── Dockerfile.legacy-jar │ │ ├── Dockerfile.native │ │ └── Dockerfile.native-micro │ ├── java │ │ └── com │ │ │ └── redhat │ │ │ └── banking │ │ │ └── eda │ │ │ └── backend │ │ │ ├── BackendResource.java │ │ │ ├── CloudEventResource.java │ │ │ └── listeners │ │ │ ├── ClientDomainProcessor.java │ │ │ └── RegionDomainProcessor.java │ └── resources │ │ └── application.properties │ └── test │ └── java │ └── com │ └── redhat │ └── banking │ └── eda │ └── backend │ ├── BackendResourceTest.java │ ├── CloudEventResourceTest.java │ ├── NativeBackendResourceIT.java │ └── NativeCloudEventResourceIT.java ├── 12-deploy-serverless-native-services.sh ├── 12-quarkus-dashboard ├── .dockerignore ├── .gitignore ├── .mvn │ └── wrapper │ │ ├── MavenWrapperDownloader.java │ │ ├── maven-wrapper.jar │ │ └── maven-wrapper.properties ├── .s2i │ └── environment ├── README.md ├── get-remote-servers.sh ├── mvnw ├── mvnw.cmd ├── pom.xml ├── run-telepresence.sh └── src │ ├── main │ ├── avro │ │ └── com │ │ │ └── redhat │ │ │ └── banking │ │ │ └── eda │ │ │ └── model │ │ │ └── events │ │ │ ├── AggregateMetric.avsc │ │ │ └── Alert.avsc │ ├── docker │ │ ├── Dockerfile.jvm │ │ ├── Dockerfile.legacy-jar │ │ ├── Dockerfile.native │ │ └── Dockerfile.native-micro │ ├── java │ │ └── com │ │ │ └── redhat │ │ │ └── banking │ │ │ └── eda │ │ │ ├── dashboard │ │ │ ├── AggregateMetricResource.java │ │ │ ├── AlertResource.java │ │ │ ├── DashboardResource.java │ │ │ └── infrastructure │ │ │ │ ├── AggregateMetricContextInitializer.java │ │ │ │ ├── AggregateMetricDeserializer.java │ │ │ │ ├── AggregateMetricGenerator.java │ │ │ │ ├── AggregateMetricProcessor.java │ │ │ │ ├── AlertContextInitializer.java │ │ │ │ ├── AlertDeserializer.java │ │ │ │ ├── AlertGenerator.java │ │ │ │ └── AlertProcessor.java │ │ │ └── model │ │ │ └── dto │ │ │ ├── AggregateMetricDTO.java │ │ │ ├── AlertDTO.java │ │ │ └── AlertVariantDTO.java │ ├── resources │ │ ├── META-INF │ │ │ └── resources │ │ │ │ ├── 200.html │ │ │ │ ├── asset-manifest.json │ │ │ │ ├── favicon.ico │ │ │ │ ├── fonts │ │ │ │ ├── RedHatDisplay-Bold.eot │ │ │ │ ├── RedHatDisplay-Bold.woff │ │ │ │ ├── RedHatDisplay-Medium.eot │ │ │ │ ├── RedHatDisplay-Medium.woff │ │ │ │ ├── RedHatDisplay-Regular.eot │ │ │ │ ├── RedHatDisplay-Regular.woff │ │ │ │ ├── RedHatText-Medium.eot │ │ │ │ ├── RedHatText-Medium.woff │ │ │ │ ├── RedHatText-Regular.eot │ │ │ │ ├── RedHatText-Regular.woff │ │ │ │ ├── overpass-bold-italic.eot │ │ │ │ ├── overpass-bold-italic.ttf │ │ │ │ ├── overpass-bold-italic.woff │ │ │ │ ├── overpass-bold-italic.woff2 │ │ │ │ ├── overpass-bold.eot │ │ │ │ ├── overpass-bold.ttf │ │ │ │ ├── overpass-bold.woff │ │ │ │ ├── overpass-bold.woff2 │ │ │ │ ├── overpass-extrabold-italic.eot │ │ │ │ ├── overpass-extrabold-italic.ttf │ │ │ │ ├── overpass-extrabold-italic.woff │ │ │ │ ├── overpass-extrabold-italic.woff2 │ │ │ │ ├── overpass-extrabold.eot │ │ │ │ ├── overpass-extrabold.ttf │ │ │ │ ├── overpass-extrabold.woff │ │ │ │ ├── overpass-extrabold.woff2 │ │ │ │ ├── overpass-extralight-italic.eot │ │ │ │ ├── overpass-extralight-italic.ttf │ │ │ │ ├── overpass-extralight-italic.woff │ │ │ │ ├── overpass-extralight-italic.woff2 │ │ │ │ ├── overpass-extralight.eot │ │ │ │ ├── overpass-extralight.ttf │ │ │ │ ├── overpass-extralight.woff │ │ │ │ ├── overpass-extralight.woff2 │ │ │ │ ├── overpass-heavy-italic.eot │ │ │ │ ├── overpass-heavy-italic.ttf │ │ │ │ ├── overpass-heavy-italic.woff │ │ │ │ ├── overpass-heavy-italic.woff2 │ │ │ │ ├── overpass-heavy.eot │ │ │ │ ├── overpass-heavy.ttf │ │ │ │ ├── overpass-heavy.woff │ │ │ │ ├── overpass-heavy.woff2 │ │ │ │ ├── overpass-italic.eot │ │ │ │ ├── overpass-italic.ttf │ │ │ │ ├── overpass-italic.woff │ │ │ │ ├── overpass-italic.woff2 │ │ │ │ ├── overpass-light-italic.eot │ │ │ │ ├── overpass-light-italic.ttf │ │ │ │ ├── overpass-light-italic.woff │ │ │ │ ├── overpass-light-italic.woff2 │ │ │ │ ├── overpass-light.eot │ │ │ │ ├── overpass-light.ttf │ │ │ │ ├── overpass-light.woff │ │ │ │ ├── overpass-light.woff2 │ │ │ │ ├── overpass-mono-bold.eot │ │ │ │ ├── overpass-mono-bold.ttf │ │ │ │ ├── overpass-mono-bold.woff │ │ │ │ ├── overpass-mono-bold.woff2 │ │ │ │ ├── overpass-mono-light.eot │ │ │ │ ├── overpass-mono-light.ttf │ │ │ │ ├── overpass-mono-light.woff │ │ │ │ ├── overpass-mono-light.woff2 │ │ │ │ ├── overpass-mono-regular.eot │ │ │ │ ├── overpass-mono-regular.ttf │ │ │ │ ├── overpass-mono-regular.woff │ │ │ │ ├── overpass-mono-regular.woff2 │ │ │ │ ├── overpass-mono-semibold.eot │ │ │ │ ├── overpass-mono-semibold.ttf │ │ │ │ ├── overpass-mono-semibold.woff │ │ │ │ ├── overpass-mono-semibold.woff2 │ │ │ │ ├── overpass-regular.eot │ │ │ │ ├── overpass-regular.ttf │ │ │ │ ├── overpass-regular.woff │ │ │ │ ├── overpass-regular.woff2 │ │ │ │ ├── overpass-semibold-italic.eot │ │ │ │ ├── overpass-semibold-italic.ttf │ │ │ │ ├── overpass-semibold-italic.woff │ │ │ │ ├── overpass-semibold-italic.woff2 │ │ │ │ ├── overpass-semibold.eot │ │ │ │ ├── overpass-semibold.ttf │ │ │ │ ├── overpass-semibold.woff │ │ │ │ ├── overpass-semibold.woff2 │ │ │ │ ├── overpass-thin-italic.eot │ │ │ │ ├── overpass-thin-italic.ttf │ │ │ │ ├── overpass-thin-italic.woff │ │ │ │ ├── overpass-thin-italic.woff2 │ │ │ │ ├── overpass-thin.eot │ │ │ │ ├── overpass-thin.ttf │ │ │ │ ├── overpass-thin.woff │ │ │ │ ├── overpass-thin.woff2 │ │ │ │ ├── pficon.eot │ │ │ │ ├── pficon.svg │ │ │ │ ├── pficon.ttf │ │ │ │ ├── pficon.woff │ │ │ │ └── pficon.woff2 │ │ │ │ ├── images │ │ │ │ ├── favicon.png │ │ │ │ ├── pfbg_2000.jpg │ │ │ │ ├── pfbg_576.jpg │ │ │ │ ├── pfbg_576@2x.jpg │ │ │ │ ├── pfbg_768.jpg │ │ │ │ ├── pfbg_768@2x.jpg │ │ │ │ └── pfbg_992@2x.jpg │ │ │ │ ├── index.html │ │ │ │ ├── logo192.png │ │ │ │ ├── logo512.png │ │ │ │ ├── main.bundle.js │ │ │ │ ├── main.bundle.js.LICENSE.txt │ │ │ │ ├── main.bundle.js.map │ │ │ │ ├── main.css │ │ │ │ ├── main.css.map │ │ │ │ ├── manifest.json │ │ │ │ ├── robots.txt │ │ │ │ └── static │ │ │ │ ├── css │ │ │ │ ├── 2.395bb006.chunk.css │ │ │ │ ├── 2.395bb006.chunk.css.map │ │ │ │ ├── main.6dea0f05.chunk.css │ │ │ │ └── main.6dea0f05.chunk.css.map │ │ │ │ ├── js │ │ │ │ ├── 2.db173312.chunk.js │ │ │ │ ├── 2.db173312.chunk.js.LICENSE.txt │ │ │ │ ├── 2.db173312.chunk.js.map │ │ │ │ ├── 3.da421001.chunk.js │ │ │ │ ├── 3.da421001.chunk.js.map │ │ │ │ ├── main.4aa2b844.chunk.js │ │ │ │ ├── main.4aa2b844.chunk.js.map │ │ │ │ ├── runtime-main.020335ec.js │ │ │ │ └── runtime-main.020335ec.js.map │ │ │ │ └── media │ │ │ │ ├── RedHatDisplay-Bold.24515e9b.woff │ │ │ │ ├── RedHatDisplay-Bold.723874f4.eot │ │ │ │ ├── RedHatDisplay-Medium.3023e2f3.eot │ │ │ │ ├── RedHatDisplay-Medium.732b5ddb.woff │ │ │ │ ├── RedHatDisplay-Regular.77929aa7.woff │ │ │ │ ├── RedHatDisplay-Regular.d49398e9.eot │ │ │ │ ├── RedHatText-Medium.47a03d21.woff │ │ │ │ ├── RedHatText-Medium.6130c5df.eot │ │ │ │ ├── RedHatText-Regular.4f3a0124.eot │ │ │ │ ├── RedHatText-Regular.81aade5a.woff │ │ │ │ ├── fa-solid-900.0239b225.woff │ │ │ │ ├── fa-solid-900.81853c2f.ttf │ │ │ │ ├── fa-solid-900.c2b7c032.woff2 │ │ │ │ ├── fa-solid-900.f06e568e.eot │ │ │ │ ├── fa-solid-900.fc5dd5b7.svg │ │ │ │ ├── overpass-bold-italic.89a09f63.woff2 │ │ │ │ ├── overpass-bold-italic.e716d42b.eot │ │ │ │ ├── overpass-bold-italic.e7bea4af.woff │ │ │ │ ├── overpass-bold-italic.f8525e8f.ttf │ │ │ │ ├── overpass-bold.4363e096.eot │ │ │ │ ├── overpass-bold.8aae586c.woff │ │ │ │ ├── overpass-bold.b6f1c5d0.ttf │ │ │ │ ├── overpass-bold.cf06a52f.woff2 │ │ │ │ ├── overpass-extrabold-italic.190776b0.woff2 │ │ │ │ ├── overpass-extrabold-italic.800277ea.woff │ │ │ │ ├── overpass-extrabold-italic.cb9cea95.ttf │ │ │ │ ├── overpass-extrabold-italic.d8b3d123.eot │ │ │ │ ├── overpass-extrabold.3cd11726.woff │ │ │ │ ├── overpass-extrabold.8584d6d2.woff2 │ │ │ │ ├── overpass-extrabold.b827a443.eot │ │ │ │ ├── overpass-extrabold.e1287366.ttf │ │ │ │ ├── overpass-extralight-italic.269ca6c8.woff2 │ │ │ │ ├── overpass-extralight-italic.73ab4e0a.ttf │ │ │ │ ├── overpass-extralight-italic.bc0502ff.woff │ │ │ │ ├── overpass-extralight-italic.ed58ea35.eot │ │ │ │ ├── overpass-extralight.4fa1de25.eot │ │ │ │ ├── overpass-extralight.60cc25d4.woff2 │ │ │ │ ├── overpass-extralight.bd43f64c.ttf │ │ │ │ ├── overpass-extralight.c0276d79.woff │ │ │ │ ├── overpass-heavy-italic.093a7994.eot │ │ │ │ ├── overpass-heavy-italic.23fc486b.woff │ │ │ │ ├── overpass-heavy-italic.57649dc0.ttf │ │ │ │ ├── overpass-heavy-italic.95fdf61f.woff2 │ │ │ │ ├── overpass-heavy.11855d3f.woff2 │ │ │ │ ├── overpass-heavy.b5204399.ttf │ │ │ │ ├── overpass-heavy.d88b6664.eot │ │ │ │ ├── overpass-heavy.e9d4a1e9.woff │ │ │ │ ├── overpass-italic.35d01efd.woff │ │ │ │ ├── overpass-italic.86ba5ba4.eot │ │ │ │ ├── overpass-italic.ab4371a5.woff2 │ │ │ │ ├── overpass-italic.feb05e55.ttf │ │ │ │ ├── overpass-light-italic.0a4b379b.ttf │ │ │ │ ├── overpass-light-italic.34d0b884.eot │ │ │ │ ├── overpass-light-italic.59058fe4.woff2 │ │ │ │ ├── overpass-light-italic.ac78b4f2.woff │ │ │ │ ├── overpass-light.176868e8.eot │ │ │ │ ├── overpass-light.1c45e67b.ttf │ │ │ │ ├── overpass-light.54923114.woff │ │ │ │ ├── overpass-light.675eb11f.woff2 │ │ │ │ ├── overpass-mono-bold.4515cb64.eot │ │ │ │ ├── overpass-mono-bold.69bf841b.woff2 │ │ │ │ ├── overpass-mono-bold.7799d940.woff │ │ │ │ ├── overpass-mono-bold.95cea96f.ttf │ │ │ │ ├── overpass-mono-light.0be5ef4b.eot │ │ │ │ ├── overpass-mono-light.99464515.woff2 │ │ │ │ ├── overpass-mono-light.bfe9360a.ttf │ │ │ │ ├── overpass-mono-light.d6b6f0c7.woff │ │ │ │ ├── overpass-mono-regular.053c8708.eot │ │ │ │ ├── overpass-mono-regular.64fbabef.ttf │ │ │ │ ├── overpass-mono-regular.7150021d.woff2 │ │ │ │ ├── overpass-mono-regular.db4223ab.woff │ │ │ │ ├── overpass-mono-semibold.4bc0afcd.ttf │ │ │ │ ├── overpass-mono-semibold.54b2e338.woff2 │ │ │ │ ├── overpass-mono-semibold.7d5ee241.eot │ │ │ │ ├── overpass-mono-semibold.88ade95a.woff │ │ │ │ ├── overpass-regular.14f8b4c8.eot │ │ │ │ ├── overpass-regular.246cf166.woff2 │ │ │ │ ├── overpass-regular.5e774351.ttf │ │ │ │ ├── overpass-regular.817d3df1.woff │ │ │ │ ├── overpass-semibold-italic.323f30b3.woff2 │ │ │ │ ├── overpass-semibold-italic.750945a4.ttf │ │ │ │ ├── overpass-semibold-italic.755f9be7.eot │ │ │ │ ├── overpass-semibold-italic.8d723ad7.woff │ │ │ │ ├── overpass-semibold.1353c4d0.eot │ │ │ │ ├── overpass-semibold.164a0ab4.woff │ │ │ │ ├── overpass-semibold.61142d93.woff2 │ │ │ │ ├── overpass-semibold.61cde743.ttf │ │ │ │ ├── overpass-thin-italic.3278ae4a.woff2 │ │ │ │ ├── overpass-thin-italic.4a854797.eot │ │ │ │ ├── overpass-thin-italic.4e730341.ttf │ │ │ │ ├── overpass-thin-italic.ac4ae66c.woff │ │ │ │ ├── overpass-thin.06037ca2.woff2 │ │ │ │ ├── overpass-thin.0a38e7ad.ttf │ │ │ │ ├── overpass-thin.1904b4e1.woff │ │ │ │ ├── overpass-thin.8337c6c0.eot │ │ │ │ ├── pfbg_2000.3b693db0.jpg │ │ │ │ ├── pfbg_576.b64efab6.jpg │ │ │ │ ├── pfbg_576@2x.08322afb.jpg │ │ │ │ ├── pfbg_768.56faebea.jpg │ │ │ │ ├── pfbg_768@2x.eea28e73.jpg │ │ │ │ ├── pfbg_992@2x.30e8d31f.jpg │ │ │ │ ├── pficon.0c3175ea.ttf │ │ │ │ ├── pficon.65289047.svg │ │ │ │ ├── pficon.bbfff1d4.woff2 │ │ │ │ ├── pficon.cf20f640.eot │ │ │ │ └── pficon.eae21d83.woff │ │ └── application.properties │ └── webapp │ │ ├── .editorconfig │ │ ├── .eslintrc │ │ ├── .gitignore │ │ ├── .prettierignore │ │ ├── .prettierrc │ │ ├── .storybook │ │ ├── config.ts │ │ ├── tsconfig.json │ │ └── webpack.config.js │ │ ├── LICENSE │ │ ├── README.md │ │ ├── __mocks__ │ │ ├── fileMock.js │ │ └── styleMock.js │ │ ├── dr-surge.js │ │ ├── jest.config.js │ │ ├── package-lock.json │ │ ├── package.json │ │ ├── src │ │ ├── app │ │ │ ├── AggregateMetrics │ │ │ │ ├── AggregateMetrics.tsx │ │ │ │ └── LineChartByName.tsx │ │ │ ├── Alerts │ │ │ │ └── Alerts.tsx │ │ │ ├── AppLayout │ │ │ │ └── AppLayout.tsx │ │ │ ├── Dashboard │ │ │ │ └── Dashboard.tsx │ │ │ ├── NotFound │ │ │ │ └── NotFound.tsx │ │ │ ├── Settings │ │ │ │ ├── General │ │ │ │ │ └── GeneralSettings.tsx │ │ │ │ └── Profile │ │ │ │ │ └── ProfileSettings.tsx │ │ │ ├── Support │ │ │ │ └── Support.tsx │ │ │ ├── __snapshots__ │ │ │ │ └── app.test.tsx.snap │ │ │ ├── app.css │ │ │ ├── app.test.tsx │ │ │ ├── bgimages │ │ │ │ ├── Patternfly-Logo.svg │ │ │ │ └── avatarImg.svg │ │ │ ├── index.tsx │ │ │ ├── routes.tsx │ │ │ └── utils │ │ │ │ ├── useDocumentTitle.ts │ │ │ │ └── utils.ts │ │ ├── favicon.png │ │ ├── index.html │ │ ├── index.tsx │ │ └── typings.d.ts │ │ ├── stories │ │ ├── Dashboard.stories.tsx │ │ └── Support.stories.tsx │ │ ├── stylePaths.js │ │ ├── test-setup.js │ │ ├── tsconfig.json │ │ ├── webpack.common.js │ │ ├── webpack.dev.js │ │ └── webpack.prod.js │ └── test │ └── java │ └── com │ └── redhat │ └── banking │ └── eda │ └── dashboard │ ├── DashboardResourceTest.java │ ├── NativeDashboardResourceIT.java │ └── resources │ └── CacheResource.java ├── 14-serverless ├── README.md ├── knative-eventing │ ├── kafka-source │ │ ├── backend-kafka-source.yaml │ │ ├── data-streaming-kafka-source.yaml │ │ └── event-display-kafka-source.yaml │ ├── knative-eventing.yaml │ ├── knative-kafka.yaml │ └── topics │ │ └── eda-cloud-events-topic.yml ├── knative-serving │ └── knative-serving.yaml └── service │ ├── backend-service.yaml │ ├── dashboard-service.yaml │ ├── data-streaming-service.yaml │ └── event-display-service.yaml ├── 15-native-services ├── README.md ├── knative-eventing │ └── kafka-source │ │ ├── backend-native-kafka-source.yaml │ │ └── data-streaming-native-kafka-source.yaml └── service │ ├── backend-native-service.yaml │ ├── dashboard-native-service.yaml │ └── data-streaming-native-service.yaml ├── 98-query-enterprise-data.sh ├── 99-update-regions.sh ├── LICENSE ├── README.md └── img ├── eda-logical-architecture.png └── eda-physical-architecture.png /.github/release-drafter.yml: -------------------------------------------------------------------------------- 1 | # This release drafter follows the conventions 2 | # from https://keepachangelog.com 3 | 4 | name-template: 'v$RESOLVED_VERSION' 5 | tag-template: 'v$RESOLVED_VERSION' 6 | template: | 7 | ## What Changed 👀 8 | 9 | $CHANGES 10 | 11 | **Full Changelog**: https://github.com/$OWNER/$REPOSITORY/compare/$PREVIOUS_TAG...v$RESOLVED_VERSION 12 | categories: 13 | - title: 🚀 Features 14 | labels: 15 | - feature 16 | - enhancement 17 | - title: 🐛 Bug Fixes 18 | labels: 19 | - fix 20 | - bug 21 | - title: ⚠️ Changes 22 | labels: 23 | - changed 24 | - title: ⛔️ Deprecated 25 | labels: 26 | - deprecated 27 | - title: 🗑 Removed 28 | labels: 29 | - removed 30 | - title: 🔐 Security 31 | labels: 32 | - security 33 | - title: 📄 Documentation 34 | labels: 35 | - docs 36 | - documentation 37 | - title: 🧩 Dependency Updates 38 | labels: 39 | - deps 40 | - dependencies 41 | collapse-after: 5 42 | 43 | change-template: '* $TITLE (#$NUMBER)' # Default "* $TITLE (#$NUMBER) @$AUTHOR" 44 | change-title-escapes: '\<*_&' # You can add # and @ to disable mentions, and add ` to disable code blocks. 45 | 46 | exclude-labels: 47 | - skip-changelog 48 | -------------------------------------------------------------------------------- /.github/workflows/release-drafter.yml: -------------------------------------------------------------------------------- 1 | name: 🔖 Release Drafter 🔖 2 | 3 | on: 4 | push: 5 | tags: 6 | - v[0-9]+.[0-9]+.[0-9]+ 7 | 8 | permissions: 9 | contents: read 10 | 11 | jobs: 12 | update_release_draft: 13 | name: Release drafter 14 | runs-on: ubuntu-latest 15 | permissions: 16 | # write permission is required to create a github release 17 | contents: write 18 | 19 | steps: 20 | - name: Update Release Draft 21 | uses: release-drafter/release-drafter@v5 22 | with: 23 | publish: true 24 | prerelease: false 25 | env: 26 | # Instead of GITHUB_TOKEN Ref: https://github.com/stefanzweifel/changelog-updater-action/discussions/30 27 | GITHUB_TOKEN: ${{ secrets.PERSONAL_ACCESS_TOKEN }} 28 | -------------------------------------------------------------------------------- /.github/workflows/update-changelog.yml: -------------------------------------------------------------------------------- 1 | name: 📄 Update Changelog 📄 2 | 3 | on: 4 | release: 5 | types: [released] 6 | 7 | jobs: 8 | update: 9 | name: Update Changelog 10 | runs-on: ubuntu-latest 11 | permissions: 12 | # Give the default GITHUB_TOKEN write permission to commit and push the 13 | # updated CHANGELOG back to the repository. 14 | # https://github.blog/changelog/2023-02-02-github-actions-updating-the-default-github_token-permissions-to-read-only/ 15 | contents: write 16 | 17 | steps: 18 | - name: Checkout code 19 | uses: actions/checkout@v3 20 | 21 | - name: Update Changelog 22 | uses: stefanzweifel/changelog-updater-action@v1 23 | with: 24 | latest-version: ${{ github.event.release.tag_name }} 25 | release-notes: ${{ github.event.release.body }} 26 | 27 | - name: Commit updated Changelog 28 | uses: stefanzweifel/git-auto-commit-action@v4 29 | with: 30 | branch: main 31 | commit_message: '🔖 Update changelog' 32 | file_pattern: CHANGELOG.md 33 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /target/ 2 | .project 3 | .classpath 4 | .settings/ 5 | .idea/ 6 | *.iml 7 | .vscode/ 8 | .factorypath 9 | -------------------------------------------------------------------------------- /01-operators/cluster-wide/amq-streams-subscription.yml: -------------------------------------------------------------------------------- 1 | --- 2 | apiVersion: operators.coreos.com/v1alpha1 3 | kind: Subscription 4 | metadata: 5 | name: amq-streams 6 | namespace: openshift-operators 7 | spec: 8 | channel: stable 9 | installPlanApproval: Automatic 10 | name: amq-streams 11 | source: redhat-operators 12 | sourceNamespace: openshift-marketplace 13 | startingCSV: amqstreams.v2.3.0-3 14 | -------------------------------------------------------------------------------- /01-operators/cluster-wide/datagrid-subscription.yml: -------------------------------------------------------------------------------- 1 | --- 2 | apiVersion: operators.coreos.com/v1alpha1 3 | kind: Subscription 4 | metadata: 5 | name: datagrid 6 | namespace: openshift-operators 7 | spec: 8 | channel: 8.3.x 9 | installPlanApproval: Automatic 10 | name: datagrid 11 | source: redhat-operators 12 | sourceNamespace: openshift-marketplace 13 | startingCSV: datagrid-operator.v8.3.9 14 | -------------------------------------------------------------------------------- /01-operators/cluster-wide/serverless-operator-subscription.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | apiVersion: operators.coreos.com/v1alpha1 3 | kind: Subscription 4 | metadata: 5 | name: serverless-operator 6 | namespace: openshift-operators 7 | spec: 8 | channel: stable 9 | installPlanApproval: Automatic 10 | name: serverless-operator 11 | source: redhat-operators 12 | sourceNamespace: openshift-marketplace 13 | startingCSV: serverless-operator.v1.28.0 14 | -------------------------------------------------------------------------------- /01-operators/cluster-wide/service-registry-operator-subscription.yml: -------------------------------------------------------------------------------- 1 | --- 2 | apiVersion: operators.coreos.com/v1alpha1 3 | kind: Subscription 4 | metadata: 5 | name: service-registry-operator 6 | namespace: openshift-operators 7 | spec: 8 | channel: 2.x 9 | installPlanApproval: Automatic 10 | name: service-registry-operator 11 | source: redhat-operators 12 | sourceNamespace: openshift-marketplace 13 | startingCSV: service-registry-operator.v2.1.4 14 | -------------------------------------------------------------------------------- /01-operators/namespace-wide/grafana-operator-subscription.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | apiVersion: operators.coreos.com/v1alpha1 3 | kind: Subscription 4 | metadata: 5 | name: grafana-operator 6 | namespace: eda-workshop 7 | spec: 8 | channel: v4 9 | installPlanApproval: Automatic 10 | name: grafana-operator 11 | source: community-operators 12 | sourceNamespace: openshift-marketplace 13 | startingCSV: grafana-operator.v4.4.1 14 | -------------------------------------------------------------------------------- /01-operators/namespace-wide/operator-group.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | apiVersion: operators.coreos.com/v1 3 | kind: OperatorGroup 4 | metadata: 5 | name: eda-workshop-og 6 | namespace: eda-workshop 7 | spec: 8 | targetNamespaces: 9 | - eda-workshop 10 | -------------------------------------------------------------------------------- /01-operators/namespace-wide/prometheus-operator-subscription.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | apiVersion: operators.coreos.com/v1alpha1 3 | kind: Subscription 4 | metadata: 5 | name: prometheus 6 | namespace: eda-workshop 7 | spec: 8 | channel: beta 9 | installPlanApproval: Automatic 10 | #name: prometheus 11 | name: rhods-prometheus-operator 12 | #source: community-operators 13 | source: redhat-operators 14 | sourceNamespace: openshift-marketplace 15 | #startingCSV: prometheusoperator.0.56.3 16 | startingCSV: rhods-prometheus-operator.4.10.0 17 | -------------------------------------------------------------------------------- /02-load-enterprise-data.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | echo "*************************************" 4 | echo "Query data into Enterprise Database" 5 | echo "*************************************" 6 | 7 | # Get the name of the MySQL pod 8 | MYSQL_POD=$(oc get pods -l deployment=mysql-enterprise -n eda-workshop -o jsonpath='{.items[0].metadata.name}') 9 | echo "MySQL pod found: $MYSQL_POD" 10 | 11 | # Define the local file path and remote file path 12 | LOCAL_FILE=./03-databases/mysql/enterprise/data/enterprise-data.sql 13 | REMOTE_FILE=/tmp/data.sql 14 | 15 | # Copy the script file to the pod container 16 | oc cp $LOCAL_FILE $MYSQL_POD:$REMOTE_FILE 17 | 18 | # Run the script inside the container 19 | oc exec $MYSQL_POD -- bash -c 'mysql -u mysqluser -pmysqlpw enterprise < /tmp/data.sql' 20 | -------------------------------------------------------------------------------- /02-metrics/grafana/grafana.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: integreatly.org/v1alpha1 2 | kind: GrafanaDataSource 3 | metadata: 4 | name: prometheus 5 | labels: 6 | app: grafana 7 | finalizers: [] 8 | spec: 9 | name: prometheus.yaml 10 | datasources: 11 | - name: Prometheus 12 | type: prometheus 13 | access: proxy 14 | url: http://prometheus-operated:9090 15 | isDefault: true 16 | version: 1 17 | editable: true 18 | jsonData: 19 | tlsSkipVerify: true 20 | timeInterval: "5s" 21 | --- 22 | apiVersion: integreatly.org/v1alpha1 23 | kind: Grafana 24 | metadata: 25 | name: grafana-strimzi 26 | labels: 27 | app: grafana 28 | spec: 29 | ingress: 30 | enabled: True 31 | config: 32 | log: 33 | mode: "console" 34 | level: "warn" 35 | security: 36 | admin_user: "root" 37 | admin_password: "secret" 38 | auth: 39 | disable_login_form: False 40 | disable_signout_menu: True 41 | auth.basic: 42 | enabled: True 43 | auth.anonymous: 44 | enabled: False 45 | dashboardLabelSelector: 46 | - matchExpressions: 47 | - {key: app, operator: In, values: [grafana]} 48 | -------------------------------------------------------------------------------- /02-metrics/prometheus/alert-manager.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: monitoring.coreos.com/v1 2 | kind: Alertmanager 3 | metadata: 4 | name: alertmanager 5 | labels: 6 | app: strimzi 7 | spec: 8 | replicas: 1 9 | --- 10 | apiVersion: v1 11 | kind: Service 12 | metadata: 13 | name: alertmanager 14 | labels: 15 | app: strimzi 16 | spec: 17 | ports: 18 | - name: alertmanager 19 | port: 9093 20 | targetPort: 9093 21 | protocol: TCP 22 | selector: 23 | alertmanager: alertmanager 24 | type: ClusterIP -------------------------------------------------------------------------------- /02-metrics/prometheus/dashboard-service-monitor.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: monitoring.coreos.com/v1 2 | kind: ServiceMonitor 3 | metadata: 4 | labels: 5 | k8s-app: prometheus 6 | name: dashboard-monitor 7 | spec: 8 | namespaceSelector: 9 | matchNames: 10 | - eda-workshop 11 | endpoints: 12 | - interval: 30s 13 | path: /q/metrics 14 | port: http 15 | selector: 16 | matchLabels: 17 | app.kubernetes.io/name: dashboard -------------------------------------------------------------------------------- /03-databases/mysql/enterprise/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM mysql:5.7.35 2 | 3 | LABEL maintainer="Debezium Community" 4 | LABEL database="Enterprise Database" 5 | 6 | COPY mysql.cnf /etc/mysql/conf.d/ 7 | COPY data/enterprise.sql /docker-entrypoint-initdb.d/ 8 | #COPY data/enterprise-data.sql /docker-entrypoint-initdb.d/ 9 | -------------------------------------------------------------------------------- /03-databases/mysql/enterprise/data/enterprise-query.sql: -------------------------------------------------------------------------------- 1 | 2 | -- Switch to this database 3 | USE enterprise; 4 | 5 | -- 6 | -- Set of queries to get check data 7 | -- 8 | 9 | -- Balance by Region 10 | select '* Balance by Region *' AS ''; 11 | select region_code,sum(quantity) from accounts a, movements m where a.id = m.account_id group by a.region_code order by sum(quantity) desc; 12 | 13 | -- Account Closed by Region 14 | select '* Account Closed by Region *' AS ''; 15 | select region_code,count(*) from accounts where status = 'CLOSED' group by region_code,status; 16 | 17 | -- Account Inactive by Region 18 | select '* Account Inactive by Region *' AS ''; 19 | select region_code,count(*) from accounts where status = 'INACTIVE' group by region_code,status; 20 | 21 | -- Account Active by Region 22 | select '* Account Active by Region *' AS ''; 23 | select region_code,count(*) from accounts where status = 'ACTIVE' group by region_code,status; 24 | 25 | -- Account statuses by Region 26 | select '* Account statuses by Region *' AS ''; 27 | select region_code,status,count(*) from accounts a group by region_code,status; 28 | -------------------------------------------------------------------------------- /03-databases/mysql/inventory/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM mysql:5.7.35 2 | 3 | LABEL maintainer="Debezium Community" 4 | LABEL database="Inventory Database" 5 | 6 | COPY mysql.cnf /etc/mysql/conf.d/ 7 | COPY data/inventory.sql /docker-entrypoint-initdb.d/ 8 | -------------------------------------------------------------------------------- /04-kafka/kafka/configmap/cruise-control-metrics.yaml: -------------------------------------------------------------------------------- 1 | kind: ConfigMap 2 | apiVersion: v1 3 | metadata: 4 | name: cruise-control-metrics 5 | labels: 6 | app: strimzi 7 | data: 8 | metrics-config.yml: | 9 | # See https://github.com/prometheus/jmx_exporter for more info about JMX Prometheus Exporter metrics 10 | lowercaseOutputName: true 11 | rules: 12 | - pattern: kafka.cruisecontrol<>(\w+) 13 | name: kafka_cruisecontrol_$1_$2 14 | type: GAUGE -------------------------------------------------------------------------------- /04-kafka/topics/data/eda-data-accounts-topic.yml: -------------------------------------------------------------------------------- 1 | --- 2 | apiVersion: kafka.strimzi.io/v1beta2 3 | kind: KafkaTopic 4 | metadata: 5 | labels: 6 | strimzi.io/cluster: event-bus 7 | name: eda.data.accounts 8 | spec: 9 | config: 10 | # 7 days 11 | retention.ms: 604800000 12 | segment.bytes: 1073741824 13 | cleanup.policy: compact 14 | partitions: 1 15 | replicas: 3 16 | -------------------------------------------------------------------------------- /04-kafka/topics/data/eda-data-clients-topic.yml: -------------------------------------------------------------------------------- 1 | --- 2 | apiVersion: kafka.strimzi.io/v1beta2 3 | kind: KafkaTopic 4 | metadata: 5 | labels: 6 | strimzi.io/cluster: event-bus 7 | name: eda.data.clients 8 | spec: 9 | config: 10 | # 7 days 11 | retention.ms: 604800000 12 | segment.bytes: 1073741824 13 | cleanup.policy: compact 14 | partitions: 1 15 | replicas: 3 16 | -------------------------------------------------------------------------------- /04-kafka/topics/data/eda-data-movements-topic.yml: -------------------------------------------------------------------------------- 1 | --- 2 | apiVersion: kafka.strimzi.io/v1beta2 3 | kind: KafkaTopic 4 | metadata: 5 | labels: 6 | strimzi.io/cluster: event-bus 7 | name: eda.data.movements 8 | spec: 9 | config: 10 | # 7 days 11 | retention.ms: 604800000 12 | segment.bytes: 1073741824 13 | cleanup.policy: compact 14 | partitions: 1 15 | replicas: 3 16 | -------------------------------------------------------------------------------- /04-kafka/topics/data/eda-data-regions-topic.yml: -------------------------------------------------------------------------------- 1 | --- 2 | apiVersion: kafka.strimzi.io/v1beta2 3 | kind: KafkaTopic 4 | metadata: 5 | labels: 6 | strimzi.io/cluster: event-bus 7 | name: eda.data.regions 8 | spec: 9 | config: 10 | # 7 days 11 | retention.ms: "604800000" 12 | segment.bytes: "1073741824" 13 | cleanup.policy: "compact" 14 | partitions: 1 15 | replicas: 3 16 | -------------------------------------------------------------------------------- /04-kafka/topics/domain/eda-events-domain-accounts-balance-low-reached-topic.yml: -------------------------------------------------------------------------------- 1 | --- 2 | apiVersion: kafka.strimzi.io/v1beta2 3 | kind: KafkaTopic 4 | metadata: 5 | labels: 6 | strimzi.io/cluster: event-bus 7 | name: eda.events.domain.accounts.balance.low.reached 8 | spec: 9 | config: 10 | # 7 days 11 | retention.ms: 604800000 12 | segment.bytes: 1073741824 13 | cleanup.policy: compact 14 | partitions: 1 15 | replicas: 3 16 | -------------------------------------------------------------------------------- /04-kafka/topics/domain/eda-events-domain-accounts-balance-neg-reached-topic.yml: -------------------------------------------------------------------------------- 1 | --- 2 | apiVersion: kafka.strimzi.io/v1beta2 3 | kind: KafkaTopic 4 | metadata: 5 | labels: 6 | strimzi.io/cluster: event-bus 7 | name: eda.events.domain.accounts.balance.neg.reached 8 | spec: 9 | config: 10 | # 7 days 11 | retention.ms: 604800000 12 | segment.bytes: 1073741824 13 | cleanup.policy: compact 14 | partitions: 1 15 | replicas: 3 16 | -------------------------------------------------------------------------------- /04-kafka/topics/domain/eda-events-domain-accounts-balance-vip-reached-topic.yml: -------------------------------------------------------------------------------- 1 | --- 2 | apiVersion: kafka.strimzi.io/v1beta2 3 | kind: KafkaTopic 4 | metadata: 5 | labels: 6 | strimzi.io/cluster: event-bus 7 | name: eda.events.domain.accounts.balance.vip.reached 8 | spec: 9 | config: 10 | # 7 days 11 | retention.ms: 604800000 12 | segment.bytes: 1073741824 13 | cleanup.policy: compact 14 | partitions: 1 15 | replicas: 3 16 | -------------------------------------------------------------------------------- /04-kafka/topics/domain/eda-events-domain-accounts-topic.yml: -------------------------------------------------------------------------------- 1 | --- 2 | apiVersion: kafka.strimzi.io/v1beta2 3 | kind: KafkaTopic 4 | metadata: 5 | labels: 6 | strimzi.io/cluster: event-bus 7 | name: eda.events.domain.accounts 8 | spec: 9 | config: 10 | # 7 days 11 | retention.ms: 604800000 12 | segment.bytes: 1073741824 13 | cleanup.policy: compact 14 | partitions: 1 15 | replicas: 3 16 | -------------------------------------------------------------------------------- /04-kafka/topics/domain/eda-events-domain-clients-accounts-closed-topic.yml: -------------------------------------------------------------------------------- 1 | --- 2 | apiVersion: kafka.strimzi.io/v1beta2 3 | kind: KafkaTopic 4 | metadata: 5 | labels: 6 | strimzi.io/cluster: event-bus 7 | name: eda.events.domain.clients.accounts.closed 8 | spec: 9 | config: 10 | # 7 days 11 | retention.ms: 604800000 12 | segment.bytes: 1073741824 13 | cleanup.policy: compact 14 | partitions: 1 15 | replicas: 3 16 | -------------------------------------------------------------------------------- /04-kafka/topics/domain/eda-events-domain-clients-accounts-inactivated-topic.yml: -------------------------------------------------------------------------------- 1 | --- 2 | apiVersion: kafka.strimzi.io/v1beta2 3 | kind: KafkaTopic 4 | metadata: 5 | labels: 6 | strimzi.io/cluster: event-bus 7 | name: eda.events.domain.clients.accounts.inactivated 8 | spec: 9 | config: 10 | # 7 days 11 | retention.ms: 604800000 12 | segment.bytes: 1073741824 13 | cleanup.policy: compact 14 | partitions: 1 15 | replicas: 3 16 | -------------------------------------------------------------------------------- /04-kafka/topics/domain/eda-events-domain-clients-topic.yml: -------------------------------------------------------------------------------- 1 | --- 2 | apiVersion: kafka.strimzi.io/v1beta2 3 | kind: KafkaTopic 4 | metadata: 5 | labels: 6 | strimzi.io/cluster: event-bus 7 | name: eda.events.domain.clients 8 | spec: 9 | config: 10 | # 7 days 11 | retention.ms: 604800000 12 | segment.bytes: 1073741824 13 | cleanup.policy: compact 14 | partitions: 1 15 | replicas: 3 16 | -------------------------------------------------------------------------------- /04-kafka/topics/domain/eda-events-domain-regions-topic.yml: -------------------------------------------------------------------------------- 1 | --- 2 | apiVersion: kafka.strimzi.io/v1beta2 3 | kind: KafkaTopic 4 | metadata: 5 | labels: 6 | strimzi.io/cluster: event-bus 7 | name: eda.events.domain.regions 8 | spec: 9 | config: 10 | # 7 days 11 | retention.ms: 604800000 12 | segment.bytes: 1073741824 13 | cleanup.policy: compact 14 | partitions: 1 15 | replicas: 3 16 | -------------------------------------------------------------------------------- /04-kafka/topics/eda-events-clients-created-topic.yml: -------------------------------------------------------------------------------- 1 | --- 2 | apiVersion: kafka.strimzi.io/v1beta2 3 | kind: KafkaTopic 4 | metadata: 5 | labels: 6 | strimzi.io/cluster: event-bus 7 | name: eda.events.clients.created 8 | spec: 9 | config: 10 | # 7 days 11 | retention.ms: 604800000 12 | segment.bytes: 1073741824 13 | cleanup.policy: compact 14 | partitions: 1 15 | replicas: 3 16 | -------------------------------------------------------------------------------- /04-kafka/topics/eda-streaming-accounts-latest-topic.yml: -------------------------------------------------------------------------------- 1 | --- 2 | apiVersion: kafka.strimzi.io/v1beta2 3 | kind: KafkaTopic 4 | metadata: 5 | labels: 6 | strimzi.io/cluster: event-bus 7 | name: eda.streaming.accounts.latest 8 | spec: 9 | config: 10 | # 7 days 11 | retention.ms: 604800000 12 | segment.bytes: 1073741824 13 | cleanup.policy: delete 14 | partitions: 1 15 | replicas: 3 16 | -------------------------------------------------------------------------------- /04-kafka/topics/events/eda-events-aggregate-metrics-topic.yml: -------------------------------------------------------------------------------- 1 | --- 2 | apiVersion: kafka.strimzi.io/v1beta2 3 | kind: KafkaTopic 4 | metadata: 5 | labels: 6 | strimzi.io/cluster: event-bus 7 | name: eda.events.aggregate-metrics 8 | spec: 9 | config: 10 | retention.ms: 604800000 11 | segment.bytes: 1073741824 12 | cleanup.policy: delete 13 | partitions: 1 14 | replicas: 3 15 | -------------------------------------------------------------------------------- /04-kafka/topics/events/eda-events-alerts-topic.yml: -------------------------------------------------------------------------------- 1 | --- 2 | apiVersion: kafka.strimzi.io/v1beta2 3 | kind: KafkaTopic 4 | metadata: 5 | labels: 6 | strimzi.io/cluster: event-bus 7 | name: eda.events.alerts 8 | spec: 9 | config: 10 | retention.ms: 604800000 11 | segment.bytes: 1073741824 12 | cleanup.policy: delete 13 | partitions: 1 14 | replicas: 3 15 | -------------------------------------------------------------------------------- /05-service-registry/apicurio-registry.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: registry.apicur.io/v1 2 | kind: ApicurioRegistry 3 | metadata: 4 | name: eda-registry 5 | spec: 6 | configuration: 7 | persistence: "kafkasql" 8 | kafkasql: 9 | bootstrapServers: "event-bus-kafka-bootstrap:9092" 10 | ui: 11 | readOnly: false 12 | logLevel: INFO 13 | deployment: 14 | replicas: 1 15 | -------------------------------------------------------------------------------- /06-kafka-connect/connectors/file-source-connector.yml: -------------------------------------------------------------------------------- 1 | --- 2 | apiVersion: kafka.strimzi.io/v1beta2 3 | kind: KafkaConnector 4 | metadata: 5 | name: file-source-connector 6 | labels: 7 | # The strimzi.io/cluster label identifies the KafkaConnect instance 8 | # in which to create this connector. That KafkaConnect instance 9 | # must have the strimzi.io/use-connector-resources annotation 10 | # set to true. 11 | strimzi.io/cluster: eda-kafka-connect 12 | spec: 13 | class: org.apache.kafka.connect.file.FileStreamSourceConnector 14 | tasksMax: 1 15 | config: 16 | file: /opt/kafka/LICENSE 17 | topic: samples.connect.file-source-topic 18 | -------------------------------------------------------------------------------- /06-kafka-connect/eda-kafka-connect-is.yaml: -------------------------------------------------------------------------------- 1 | kind: ImageStream 2 | apiVersion: image.openshift.io/v1 3 | metadata: 4 | name: eda-kafka-connect 5 | spec: 6 | lookupPolicy: 7 | local: false 8 | -------------------------------------------------------------------------------- /06-kafka-connect/topics/kafka-connect-cluster-configs-topic.yml: -------------------------------------------------------------------------------- 1 | --- 2 | apiVersion: kafka.strimzi.io/v1beta2 3 | kind: KafkaTopic 4 | metadata: 5 | labels: 6 | strimzi.io/cluster: event-bus 7 | name: kafka-connect-cluster-configs 8 | spec: 9 | config: 10 | cleanup.policy: compact 11 | partitions: 1 12 | replicas: 3 13 | -------------------------------------------------------------------------------- /06-kafka-connect/topics/kafka-connect-cluster-offsets-topic.yml: -------------------------------------------------------------------------------- 1 | --- 2 | apiVersion: kafka.strimzi.io/v1beta2 3 | kind: KafkaTopic 4 | metadata: 5 | labels: 6 | strimzi.io/cluster: event-bus 7 | name: kafka-connect-cluster-offsets 8 | spec: 9 | config: 10 | cleanup.policy: compact 11 | partitions: 25 12 | replicas: 3 13 | -------------------------------------------------------------------------------- /06-kafka-connect/topics/kafka-connect-cluster-status-topic.yml: -------------------------------------------------------------------------------- 1 | --- 2 | apiVersion: kafka.strimzi.io/v1beta2 3 | kind: KafkaTopic 4 | metadata: 5 | labels: 6 | strimzi.io/cluster: event-bus 7 | name: kafka-connect-cluster-status 8 | spec: 9 | config: 10 | cleanup.policy: compact 11 | partitions: 1 12 | replicas: 3 13 | -------------------------------------------------------------------------------- /07-datagrid/caches/aggregate-metrics-cache.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: infinispan.org/v2alpha1 2 | kind: Cache 3 | metadata: 4 | name: eda-infinispan-aggregate-metrics 5 | spec: 6 | adminAuth: 7 | secretName: eda-infinispan-caches-credentials 8 | clusterName: eda-infinispan 9 | name: aggregate-metrics 10 | template: >- 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /07-datagrid/caches/alerts-cache.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: infinispan.org/v2alpha1 2 | kind: Cache 3 | metadata: 4 | name: eda-infinispan-alerts 5 | spec: 6 | adminAuth: 7 | secretName: eda-infinispan-caches-credentials 8 | clusterName: eda-infinispan 9 | name: alerts 10 | template: >- 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /07-datagrid/caches/clients-cache.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: infinispan.org/v2alpha1 2 | kind: Cache 3 | metadata: 4 | name: eda-infinispan-clients 5 | spec: 6 | adminAuth: 7 | secretName: eda-infinispan-caches-credentials 8 | clusterName: eda-infinispan 9 | name: clients 10 | template: >- 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /07-datagrid/caches/regions-cache.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: infinispan.org/v2alpha1 2 | kind: Cache 3 | metadata: 4 | name: eda-infinispan-regions 5 | spec: 6 | adminAuth: 7 | secretName: eda-infinispan-caches-credentials 8 | clusterName: eda-infinispan 9 | name: regions 10 | template: >- 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /07-datagrid/eda-infinispan.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: infinispan.org/v1 2 | kind: Infinispan 3 | metadata: 4 | name: eda-infinispan 5 | spec: 6 | # Specifies the number of nodes in the cluster. 7 | replicas: 3 8 | service: 9 | # Configures the service type as DataGrid. 10 | type: DataGrid 11 | logging: 12 | categories: 13 | org.infinispan: info 14 | org.jgroups: info 15 | container: 16 | cpu: "1000m" 17 | memory: 1Gi 18 | expose: 19 | type: Route 20 | security: 21 | endpointEncryption: 22 | type: None 23 | endpointSecretName: eda-infinispan-credentials 24 | -------------------------------------------------------------------------------- /07-datagrid/secrets/eda-infinispan-cache-credentials-secret.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Secret 3 | metadata: 4 | name: eda-infinispan-caches-credentials 5 | type: Opaque 6 | stringData: 7 | username: operator 8 | password: operator 9 | -------------------------------------------------------------------------------- /07-datagrid/secrets/eda-infinispan-credentials-secret.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Secret 3 | metadata: 4 | name: eda-infinispan-credentials 5 | type: Opaque 6 | stringData: 7 | identities.yaml: |- 8 | credentials: 9 | - username: developer 10 | password: developer 11 | - username: operator 12 | password: operator 13 | -------------------------------------------------------------------------------- /08-quarkus-business-app/.dockerignore: -------------------------------------------------------------------------------- 1 | * 2 | !target/*-runner 3 | !target/*-runner.jar 4 | !target/lib/* 5 | !target/quarkus-app/* -------------------------------------------------------------------------------- /08-quarkus-business-app/.gitignore: -------------------------------------------------------------------------------- 1 | /target/ 2 | .project 3 | .classpath 4 | .settings/ 5 | .idea/ 6 | *.iml 7 | .vscode/ 8 | -------------------------------------------------------------------------------- /08-quarkus-business-app/.mvn/wrapper/maven-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/08-quarkus-business-app/.mvn/wrapper/maven-wrapper.jar -------------------------------------------------------------------------------- /08-quarkus-business-app/.mvn/wrapper/maven-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.8.1/apache-maven-3.8.1-bin.zip 2 | wrapperUrl=https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar 3 | -------------------------------------------------------------------------------- /08-quarkus-business-app/.s2i/environment: -------------------------------------------------------------------------------- 1 | MAVEN_S2I_ARTIFACT_DIRS=target/quarkus-app 2 | S2I_SOURCE_DEPLOYMENTS_FILTER=app lib quarkus quarkus-run.jar 3 | JAVA_OPTIONS=-Dquarkus.http.host=0.0.0.0 4 | AB_JOLOKIA_OFF=true 5 | JAVA_APP_JAR=/deployments/quarkus-run.jar 6 | 7 | -------------------------------------------------------------------------------- /08-quarkus-business-app/src/main/docker/Dockerfile.native: -------------------------------------------------------------------------------- 1 | #### 2 | # This Dockerfile is used in order to build a container that runs the Quarkus application in native (no JVM) mode. 3 | # 4 | # Before building the container image run: 5 | # 6 | # ./mvnw package -Pnative 7 | # 8 | # Then, build the image with: 9 | # 10 | # docker build -f src/main/docker/Dockerfile.native -t quarkus/code-with-quarkus . 11 | # 12 | # Then run the container using: 13 | # 14 | # docker run -i --rm -p 8080:8080 quarkus/code-with-quarkus 15 | # 16 | ### 17 | FROM registry.access.redhat.com/ubi8/ubi-minimal:8.6 18 | WORKDIR /work/ 19 | RUN chown 1001 /work \ 20 | && chmod "g+rwX" /work \ 21 | && chown 1001:root /work 22 | COPY --chown=1001:root target/*-runner /work/application 23 | 24 | EXPOSE 8080 25 | USER 1001 26 | 27 | CMD ["./application", "-Dquarkus.http.host=0.0.0.0"] -------------------------------------------------------------------------------- /08-quarkus-business-app/src/main/docker/Dockerfile.native-micro: -------------------------------------------------------------------------------- 1 | #### 2 | # This Dockerfile is used in order to build a container that runs the Quarkus application in native (no JVM) mode. 3 | # It uses a micro base image, tuned for Quarkus native executables. 4 | # It reduces the size of the resulting container image. 5 | # Check https://quarkus.io/guides/quarkus-runtime-base-image for further information about this image. 6 | # 7 | # Before building the container image run: 8 | # 9 | # ./mvnw package -Pnative 10 | # 11 | # Then, build the image with: 12 | # 13 | # docker build -f src/main/docker/Dockerfile.native-micro -t quarkus/code-with-quarkus . 14 | # 15 | # Then run the container using: 16 | # 17 | # docker run -i --rm -p 8080:8080 quarkus/code-with-quarkus 18 | # 19 | ### 20 | FROM quay.io/quarkus/quarkus-micro-image:2.0 21 | WORKDIR /work/ 22 | RUN chown 1001 /work \ 23 | && chmod "g+rwX" /work \ 24 | && chown 1001:root /work 25 | COPY --chown=1001:root target/*-runner /work/application 26 | 27 | EXPOSE 8080 28 | USER 1001 29 | 30 | CMD ["./application", "-Dquarkus.http.host=0.0.0.0"] -------------------------------------------------------------------------------- /08-quarkus-business-app/src/main/java/com/redhat/banking/enterprise/BusinessProducerResource.java: -------------------------------------------------------------------------------- 1 | package com.redhat.banking.enterprise; 2 | 3 | import javax.ws.rs.GET; 4 | import javax.ws.rs.Path; 5 | import javax.ws.rs.Produces; 6 | import javax.ws.rs.core.MediaType; 7 | 8 | @Path("/business") 9 | public class BusinessProducerResource { 10 | 11 | @GET 12 | @Produces(MediaType.TEXT_PLAIN) 13 | public String hello() { 14 | return "Hello Business Producer Application"; 15 | } 16 | 17 | } -------------------------------------------------------------------------------- /08-quarkus-business-app/src/main/java/com/redhat/banking/enterprise/entities/Account.java: -------------------------------------------------------------------------------- 1 | package com.redhat.banking.enterprise.entities; 2 | 3 | import io.quarkus.hibernate.orm.panache.PanacheEntityBase; 4 | 5 | import javax.persistence.Entity; 6 | import javax.persistence.GeneratedValue; 7 | import javax.persistence.GenerationType; 8 | import javax.persistence.Id; 9 | import javax.persistence.Table; 10 | 11 | @Entity 12 | @Table(name = "accounts") 13 | public class Account extends PanacheEntityBase { 14 | 15 | @Id 16 | @GeneratedValue(strategy = GenerationType.IDENTITY) 17 | public int id; 18 | 19 | public int client_id; 20 | public int region_id; 21 | public String region_code; 22 | public String sequence; 23 | public String status; 24 | 25 | } 26 | -------------------------------------------------------------------------------- /08-quarkus-business-app/src/main/java/com/redhat/banking/enterprise/entities/AccountStatusEnum.java: -------------------------------------------------------------------------------- 1 | package com.redhat.banking.enterprise.entities; 2 | 3 | public enum AccountStatusEnum { 4 | ACTIVE("ACTIVE"), INACTIVE("INACTIVE"), CLOSED("CLOSED"); 5 | 6 | AccountStatusEnum(String value) { 7 | this.value = value; 8 | } 9 | 10 | private final String value; 11 | 12 | public String value() { 13 | return value; 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /08-quarkus-business-app/src/main/java/com/redhat/banking/enterprise/entities/Client.java: -------------------------------------------------------------------------------- 1 | package com.redhat.banking.enterprise.entities; 2 | 3 | import io.quarkus.hibernate.orm.panache.PanacheEntityBase; 4 | 5 | import javax.persistence.Entity; 6 | import javax.persistence.GeneratedValue; 7 | import javax.persistence.GenerationType; 8 | import javax.persistence.Id; 9 | import javax.persistence.Table; 10 | 11 | @Entity 12 | @Table(name = "clients") 13 | public class Client extends PanacheEntityBase { 14 | 15 | @Id 16 | @GeneratedValue(strategy = GenerationType.IDENTITY) 17 | public int id; 18 | 19 | public String first_name; 20 | 21 | public String last_name; 22 | 23 | public String email; 24 | 25 | } 26 | -------------------------------------------------------------------------------- /08-quarkus-business-app/src/main/java/com/redhat/banking/enterprise/entities/Movement.java: -------------------------------------------------------------------------------- 1 | package com.redhat.banking.enterprise.entities; 2 | 3 | import io.quarkus.hibernate.orm.panache.PanacheEntityBase; 4 | 5 | import javax.persistence.Entity; 6 | import javax.persistence.GeneratedValue; 7 | import javax.persistence.GenerationType; 8 | import javax.persistence.Id; 9 | import javax.persistence.Table; 10 | import java.time.Instant; 11 | 12 | @Entity 13 | @Table(name = "movements") 14 | public class Movement extends PanacheEntityBase { 15 | 16 | public int account_id; 17 | 18 | @Id 19 | @GeneratedValue(strategy = GenerationType.IDENTITY) 20 | public int id; 21 | 22 | public Instant movement_date; 23 | public String description; 24 | public int quantity; 25 | 26 | } 27 | -------------------------------------------------------------------------------- /08-quarkus-business-app/src/main/java/com/redhat/banking/enterprise/entities/MovementTypeEnum.java: -------------------------------------------------------------------------------- 1 | package com.redhat.banking.enterprise.entities; 2 | 3 | public enum MovementTypeEnum { 4 | INCOMING("Incoming Transfer"), OUTGOING("Outgoing Transfer"); 5 | 6 | MovementTypeEnum(String value) { 7 | this.value = value; 8 | } 9 | 10 | private final String value; 11 | 12 | public String value() { 13 | return value; 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /08-quarkus-business-app/src/main/java/com/redhat/banking/enterprise/entities/Region.java: -------------------------------------------------------------------------------- 1 | package com.redhat.banking.enterprise.entities; 2 | 3 | import io.quarkus.hibernate.orm.panache.PanacheEntityBase; 4 | 5 | import javax.persistence.Entity; 6 | import javax.persistence.GeneratedValue; 7 | import javax.persistence.GenerationType; 8 | import javax.persistence.Id; 9 | import javax.persistence.Table; 10 | 11 | @Entity 12 | @Table(name = "regions") 13 | public class Region extends PanacheEntityBase { 14 | 15 | @Id 16 | @GeneratedValue(strategy = GenerationType.IDENTITY) 17 | public int id; 18 | 19 | public String code; 20 | public String name; 21 | public String description; 22 | 23 | } 24 | -------------------------------------------------------------------------------- /08-quarkus-business-app/src/main/java/com/redhat/banking/enterprise/repositories/AccountRepository.java: -------------------------------------------------------------------------------- 1 | package com.redhat.banking.enterprise.repositories; 2 | 3 | import com.redhat.banking.enterprise.entities.Account; 4 | import io.quarkus.hibernate.orm.panache.PanacheRepository; 5 | 6 | import javax.enterprise.context.ApplicationScoped; 7 | import java.util.List; 8 | 9 | @ApplicationScoped 10 | public class AccountRepository implements PanacheRepository { 11 | 12 | public List findByClientId(Integer clientId) { 13 | return find("client_id", clientId).list(); 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /08-quarkus-business-app/src/main/java/com/redhat/banking/enterprise/repositories/ClientRepository.java: -------------------------------------------------------------------------------- 1 | package com.redhat.banking.enterprise.repositories; 2 | 3 | import com.redhat.banking.enterprise.entities.Client; 4 | import io.quarkus.hibernate.orm.panache.PanacheRepository; 5 | 6 | import javax.enterprise.context.ApplicationScoped; 7 | 8 | @ApplicationScoped 9 | public class ClientRepository implements PanacheRepository { 10 | 11 | public Client findByEmail(String email) { 12 | return find("email", email).firstResult(); 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /08-quarkus-business-app/src/main/java/com/redhat/banking/enterprise/repositories/MovementRepository.java: -------------------------------------------------------------------------------- 1 | package com.redhat.banking.enterprise.repositories; 2 | 3 | import com.redhat.banking.enterprise.entities.Client; 4 | import com.redhat.banking.enterprise.entities.Movement; 5 | import io.quarkus.hibernate.orm.panache.PanacheRepository; 6 | 7 | import javax.enterprise.context.ApplicationScoped; 8 | 9 | @ApplicationScoped 10 | public class MovementRepository implements PanacheRepository { 11 | 12 | 13 | } 14 | -------------------------------------------------------------------------------- /08-quarkus-business-app/src/main/java/com/redhat/banking/enterprise/repositories/RegionRepository.java: -------------------------------------------------------------------------------- 1 | package com.redhat.banking.enterprise.repositories; 2 | 3 | import com.redhat.banking.enterprise.entities.Region; 4 | import io.quarkus.hibernate.orm.panache.PanacheRepository; 5 | 6 | import javax.enterprise.context.ApplicationScoped; 7 | 8 | @ApplicationScoped 9 | public class RegionRepository implements PanacheRepository { 10 | 11 | public Region findByCode(String code) { 12 | return find("code", code).firstResult(); 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /08-quarkus-business-app/src/test/java/com/redhat/banking/enterprise/BusinessProducerResourceTest.java: -------------------------------------------------------------------------------- 1 | package com.redhat.banking.enterprise; 2 | 3 | import io.quarkus.test.junit.QuarkusTest; 4 | import org.junit.jupiter.api.Test; 5 | 6 | import static io.restassured.RestAssured.given; 7 | import static org.hamcrest.CoreMatchers.is; 8 | 9 | @QuarkusTest 10 | public class BusinessProducerResourceTest { 11 | 12 | @Test 13 | public void testHelloEndpoint() { 14 | given() 15 | .when().get("/business") 16 | .then() 17 | .statusCode(200) 18 | .body(is("Hello Business Producer Application")); 19 | } 20 | 21 | } -------------------------------------------------------------------------------- /08-quarkus-business-app/src/test/java/com/redhat/banking/enterprise/NativeBusinessProducerResourceIT.java: -------------------------------------------------------------------------------- 1 | package com.redhat.banking.enterprise; 2 | 3 | import io.quarkus.test.junit.QuarkusIntegrationTest; 4 | 5 | @QuarkusIntegrationTest 6 | public class NativeBusinessProducerResourceIT extends BusinessProducerResourceTest { 7 | 8 | // Execute the same tests but in native mode. 9 | 10 | } 11 | -------------------------------------------------------------------------------- /09-event-schemas-api/.gitignore: -------------------------------------------------------------------------------- 1 | /target/ 2 | .project 3 | .classpath 4 | .settings/ 5 | .idea/ 6 | *.iml 7 | .vscode/ 8 | -------------------------------------------------------------------------------- /09-event-schemas-api/.mvn/wrapper/maven-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/09-event-schemas-api/.mvn/wrapper/maven-wrapper.jar -------------------------------------------------------------------------------- /09-event-schemas-api/.mvn/wrapper/maven-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.8.1/apache-maven-3.8.1-bin.zip 2 | wrapperUrl=https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar 3 | -------------------------------------------------------------------------------- /09-event-schemas-api/src/main/avro/com/redhat/banking/eda/model/events/accounts/AccountBalanceLOWReached.avsc: -------------------------------------------------------------------------------- 1 | { 2 | "namespace": "com.redhat.banking.eda.model.events.accounts", 3 | "name": "AccountBalanceLOWReached", 4 | "type": "record", 5 | "doc": "Client account with a low balance.", 6 | "fields": [ 7 | { 8 | "name": "id", 9 | "type": "int", 10 | "doc": "Client Id." 11 | }, 12 | { 13 | "name": "full_name", 14 | "type": { 15 | "type": "string", 16 | "avro.java.string": "String" 17 | }, 18 | "doc": "Full name." 19 | }, 20 | { 21 | "name": "email", 22 | "type": { 23 | "type": "string", 24 | "avro.java.string": "String" 25 | }, 26 | "doc": "Email." 27 | }, 28 | { 29 | "name": "sequence", 30 | "type": { 31 | "type": "string", 32 | "avro.java.string": "String" 33 | }, 34 | "doc": "Account sequence." 35 | }, 36 | { 37 | "name": "low", 38 | "type": "boolean", 39 | "doc": "Is a Low account." 40 | } 41 | ] 42 | } 43 | -------------------------------------------------------------------------------- /09-event-schemas-api/src/main/avro/com/redhat/banking/eda/model/events/accounts/AccountBalanceNEGReached.avsc: -------------------------------------------------------------------------------- 1 | { 2 | "namespace": "com.redhat.banking.eda.model.events.accounts", 3 | "name": "AccountBalanceNEGReached", 4 | "type": "record", 5 | "doc": "Client account with a negative (or sub-zero) balance.", 6 | "fields": [ 7 | { 8 | "name": "id", 9 | "type": "int", 10 | "doc": "Client Id." 11 | }, 12 | { 13 | "name": "full_name", 14 | "type": { 15 | "type": "string", 16 | "avro.java.string": "String" 17 | }, 18 | "doc": "Full name." 19 | }, 20 | { 21 | "name": "email", 22 | "type": { 23 | "type": "string", 24 | "avro.java.string": "String" 25 | }, 26 | "doc": "Email." 27 | }, 28 | { 29 | "name": "sequence", 30 | "type": { 31 | "type": "string", 32 | "avro.java.string": "String" 33 | }, 34 | "doc": "Account sequence." 35 | }, 36 | { 37 | "name": "neg", 38 | "type": "boolean", 39 | "doc": "Is a Negative account." 40 | } 41 | ] 42 | } 43 | -------------------------------------------------------------------------------- /09-event-schemas-api/src/main/avro/com/redhat/banking/eda/model/events/accounts/AccountBalanceVIPReached.avsc: -------------------------------------------------------------------------------- 1 | { 2 | "namespace": "com.redhat.banking.eda.model.events.accounts", 3 | "name": "AccountBalanceVIPReached", 4 | "type": "record", 5 | "doc": "Client account with a balance identified as VIP.", 6 | "fields": [ 7 | { 8 | "name": "id", 9 | "type": "int", 10 | "doc": "Client Id." 11 | }, 12 | { 13 | "name": "full_name", 14 | "type": { 15 | "type": "string", 16 | "avro.java.string": "String" 17 | }, 18 | "doc": "Full name." 19 | }, 20 | { 21 | "name": "email", 22 | "type": { 23 | "type": "string", 24 | "avro.java.string": "String" 25 | }, 26 | "doc": "Email." 27 | }, 28 | { 29 | "name": "sequence", 30 | "type": { 31 | "type": "string", 32 | "avro.java.string": "String" 33 | }, 34 | "doc": "Account sequence." 35 | }, 36 | { 37 | "name": "vip", 38 | "type": "boolean", 39 | "doc": "Is a VIP account." 40 | } 41 | ] 42 | } 43 | -------------------------------------------------------------------------------- /09-event-schemas-api/src/main/avro/com/redhat/banking/eda/model/events/clients/ClientAccountsClosed.avsc: -------------------------------------------------------------------------------- 1 | { 2 | "namespace": "com.redhat.banking.eda.model.events.clients", 3 | "name": "ClientAccountsClosed", 4 | "type": "record", 5 | "doc": "Client with all accounts closed.", 6 | "fields": [ 7 | { 8 | "name": "id", 9 | "type": "int", 10 | "doc": "Client Id." 11 | }, 12 | { 13 | "name": "full_name", 14 | "type": { 15 | "type": "string", 16 | "avro.java.string": "String" 17 | }, 18 | "doc": "Full name." 19 | }, 20 | { 21 | "name": "email", 22 | "type": { 23 | "type": "string", 24 | "avro.java.string": "String" 25 | }, 26 | "doc": "Email." 27 | }, 28 | { 29 | "name": "accountsClosed", 30 | "type": "int", 31 | "doc": "Number of accounts closed." 32 | } 33 | ] 34 | } 35 | -------------------------------------------------------------------------------- /09-event-schemas-api/src/main/avro/com/redhat/banking/eda/model/events/clients/ClientAccountsInactivated.avsc: -------------------------------------------------------------------------------- 1 | { 2 | "namespace": "com.redhat.banking.eda.model.events.clients", 3 | "name": "ClientAccountsInactivated", 4 | "type": "record", 5 | "doc": "Client with all accounts inactivated.", 6 | "fields": [ 7 | { 8 | "name": "id", 9 | "type": "int", 10 | "doc": "Client Id." 11 | }, 12 | { 13 | "name": "full_name", 14 | "type": { 15 | "type": "string", 16 | "avro.java.string": "String" 17 | }, 18 | "doc": "Full name." 19 | }, 20 | { 21 | "name": "email", 22 | "type": { 23 | "type": "string", 24 | "avro.java.string": "String" 25 | }, 26 | "doc": "Email." 27 | }, 28 | { 29 | "name": "accountsInactivated", 30 | "type": "int", 31 | "doc": "Number of accounts inactivated." 32 | } 33 | ] 34 | } 35 | -------------------------------------------------------------------------------- /09-event-schemas-api/src/main/docker/Dockerfile.native: -------------------------------------------------------------------------------- 1 | #### 2 | # This Dockerfile is used in order to build a container that runs the Quarkus application in native (no JVM) mode 3 | # 4 | # Before building the container image run: 5 | # 6 | # ./mvnw package -Pnative 7 | # 8 | # Then, build the image with: 9 | # 10 | # docker build -f src/main/docker/Dockerfile.native -t quarkus/quarkus-streaming . 11 | # 12 | # Then run the container using: 13 | # 14 | # docker run -i --rm -p 8080:8080 quarkus/quarkus-streaming 15 | # 16 | ### 17 | FROM registry.access.redhat.com/ubi8/ubi-minimal:8.4 18 | WORKDIR /work/ 19 | RUN chown 1001 /work \ 20 | && chmod "g+rwX" /work \ 21 | && chown 1001:root /work 22 | COPY --chown=1001:root target/*-runner /work/application 23 | 24 | EXPOSE 8080 25 | USER 1001 26 | 27 | CMD ["./application", "-Dquarkus.http.host=0.0.0.0"] 28 | -------------------------------------------------------------------------------- /09-event-schemas-api/src/main/docker/Dockerfile.native-distroless: -------------------------------------------------------------------------------- 1 | #### 2 | # This Dockerfile is used in order to build a distroless container that runs the Quarkus application in native (no JVM) mode 3 | # 4 | # Before building the container image run: 5 | # 6 | # ./mvnw package -Pnative 7 | # 8 | # Then, build the image with: 9 | # 10 | # docker build -f src/main/docker/Dockerfile.native-distroless -t quarkus/quarkus-streaming . 11 | # 12 | # Then run the container using: 13 | # 14 | # docker run -i --rm -p 8080:8080 quarkus/quarkus-streaming 15 | # 16 | ### 17 | FROM quay.io/quarkus/quarkus-distroless-image:1.0 18 | COPY target/*-runner /application 19 | 20 | EXPOSE 8080 21 | USER nonroot 22 | 23 | CMD ["./application", "-Dquarkus.http.host=0.0.0.0"] 24 | -------------------------------------------------------------------------------- /09-event-schemas-api/src/main/java/com/redhat/eda/model/AlertVariant.java: -------------------------------------------------------------------------------- 1 | package com.redhat.eda.model; 2 | 3 | public enum AlertVariant { 4 | SUCCESS("success"), DANGER("danger"), WARNING("warning"), INFO("info"), DEFAULT("default"); 5 | AlertVariant(String value) { this.value = value; } 6 | private final String value; 7 | public String value() { return value; } 8 | } 9 | -------------------------------------------------------------------------------- /09-event-schemas-api/src/main/resources/application.properties: -------------------------------------------------------------------------------- 1 | # 2 | # Application Properties 3 | # 4 | 5 | # 6 | # Quarkus Properties 7 | # 8 | -------------------------------------------------------------------------------- /10-deploy-serverless-services.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | echo "**********************************" 4 | echo "Deploying Serverless Services" 5 | echo "**********************************" 6 | 7 | oc scale deployment/data-streaming --replicas=0 8 | oc scale deployment/backend --replicas=0 9 | oc scale deployment/dashboard --replicas=0 10 | 11 | echo "**********************************" 12 | echo "Deploying Serverless Application Services" 13 | echo "**********************************" 14 | 15 | oc apply -f 14-serverless/knative-eventing/topics 16 | oc apply -f 14-serverless/service/ 17 | oc apply -f 14-serverless/knative-eventing/kafka-source 18 | -------------------------------------------------------------------------------- /10-quarkus-streaming/.gitignore: -------------------------------------------------------------------------------- 1 | /target/ 2 | .project 3 | .classpath 4 | .settings/ 5 | .idea/ 6 | *.iml 7 | .vscode/ 8 | -------------------------------------------------------------------------------- /10-quarkus-streaming/.mvn/wrapper/maven-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/10-quarkus-streaming/.mvn/wrapper/maven-wrapper.jar -------------------------------------------------------------------------------- /10-quarkus-streaming/.mvn/wrapper/maven-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.8.1/apache-maven-3.8.1-bin.zip 2 | wrapperUrl=https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar 3 | -------------------------------------------------------------------------------- /10-quarkus-streaming/.s2i/environment: -------------------------------------------------------------------------------- 1 | MAVEN_S2I_ARTIFACT_DIRS=target/quarkus-app 2 | S2I_SOURCE_DEPLOYMENTS_FILTER=app lib quarkus quarkus-run.jar 3 | JAVA_OPTIONS=-Dquarkus.http.host=0.0.0.0 4 | AB_JOLOKIA_OFF=true 5 | JAVA_APP_JAR=/deployments/quarkus-run.jar 6 | 7 | -------------------------------------------------------------------------------- /10-quarkus-streaming/src/main/avro/com/redhat/banking/eda/model/events/accounts/AccountBalanceLOWReached.avsc: -------------------------------------------------------------------------------- 1 | { 2 | "namespace": "com.redhat.banking.eda.model.events.accounts", 3 | "name": "AccountBalanceLOWReached", 4 | "type": "record", 5 | "doc": "Client account with a low balance.", 6 | "fields": [ 7 | { 8 | "name": "id", 9 | "type": "int", 10 | "doc": "Client Id." 11 | }, 12 | { 13 | "name": "full_name", 14 | "type": { 15 | "type": "string", 16 | "avro.java.string": "String" 17 | }, 18 | "doc": "Full name." 19 | }, 20 | { 21 | "name": "email", 22 | "type": { 23 | "type": "string", 24 | "avro.java.string": "String" 25 | }, 26 | "doc": "Email." 27 | }, 28 | { 29 | "name": "sequence", 30 | "type": { 31 | "type": "string", 32 | "avro.java.string": "String" 33 | }, 34 | "doc": "Account sequence." 35 | }, 36 | { 37 | "name": "low", 38 | "type": "boolean", 39 | "doc": "Is a Low account." 40 | } 41 | ] 42 | } 43 | -------------------------------------------------------------------------------- /10-quarkus-streaming/src/main/avro/com/redhat/banking/eda/model/events/accounts/AccountBalanceNEGReached.avsc: -------------------------------------------------------------------------------- 1 | { 2 | "namespace": "com.redhat.banking.eda.model.events.accounts", 3 | "name": "AccountBalanceNEGReached", 4 | "type": "record", 5 | "doc": "Client account with a negative (or sub-zero) balance.", 6 | "fields": [ 7 | { 8 | "name": "id", 9 | "type": "int", 10 | "doc": "Client Id." 11 | }, 12 | { 13 | "name": "full_name", 14 | "type": { 15 | "type": "string", 16 | "avro.java.string": "String" 17 | }, 18 | "doc": "Full name." 19 | }, 20 | { 21 | "name": "email", 22 | "type": { 23 | "type": "string", 24 | "avro.java.string": "String" 25 | }, 26 | "doc": "Email." 27 | }, 28 | { 29 | "name": "sequence", 30 | "type": { 31 | "type": "string", 32 | "avro.java.string": "String" 33 | }, 34 | "doc": "Account sequence." 35 | }, 36 | { 37 | "name": "neg", 38 | "type": "boolean", 39 | "doc": "Is a Negative account." 40 | } 41 | ] 42 | } 43 | -------------------------------------------------------------------------------- /10-quarkus-streaming/src/main/avro/com/redhat/banking/eda/model/events/accounts/AccountBalanceVIPReached.avsc: -------------------------------------------------------------------------------- 1 | { 2 | "namespace": "com.redhat.banking.eda.model.events.accounts", 3 | "name": "AccountBalanceVIPReached", 4 | "type": "record", 5 | "doc": "Client account with a balance identified as VIP.", 6 | "fields": [ 7 | { 8 | "name": "id", 9 | "type": "int", 10 | "doc": "Client Id." 11 | }, 12 | { 13 | "name": "full_name", 14 | "type": { 15 | "type": "string", 16 | "avro.java.string": "String" 17 | }, 18 | "doc": "Full name." 19 | }, 20 | { 21 | "name": "email", 22 | "type": { 23 | "type": "string", 24 | "avro.java.string": "String" 25 | }, 26 | "doc": "Email." 27 | }, 28 | { 29 | "name": "sequence", 30 | "type": { 31 | "type": "string", 32 | "avro.java.string": "String" 33 | }, 34 | "doc": "Account sequence." 35 | }, 36 | { 37 | "name": "vip", 38 | "type": "boolean", 39 | "doc": "Is a VIP account." 40 | } 41 | ] 42 | } 43 | -------------------------------------------------------------------------------- /10-quarkus-streaming/src/main/avro/com/redhat/banking/eda/model/events/clients/ClientAccountsClosed.avsc: -------------------------------------------------------------------------------- 1 | { 2 | "namespace": "com.redhat.banking.eda.model.events.clients", 3 | "name": "ClientAccountsClosed", 4 | "type": "record", 5 | "doc": "Client with all accounts closed.", 6 | "fields": [ 7 | { 8 | "name": "id", 9 | "type": "int", 10 | "doc": "Client Id." 11 | }, 12 | { 13 | "name": "full_name", 14 | "type": { 15 | "type": "string", 16 | "avro.java.string": "String" 17 | }, 18 | "doc": "Full name." 19 | }, 20 | { 21 | "name": "email", 22 | "type": { 23 | "type": "string", 24 | "avro.java.string": "String" 25 | }, 26 | "doc": "Email." 27 | }, 28 | { 29 | "name": "accountsClosed", 30 | "type": "int", 31 | "doc": "Number of accounts closed." 32 | } 33 | ] 34 | } 35 | -------------------------------------------------------------------------------- /10-quarkus-streaming/src/main/avro/com/redhat/banking/eda/model/events/clients/ClientAccountsInactivated.avsc: -------------------------------------------------------------------------------- 1 | { 2 | "namespace": "com.redhat.banking.eda.model.events.clients", 3 | "name": "ClientAccountsInactivated", 4 | "type": "record", 5 | "doc": "Client with all accounts inactivated.", 6 | "fields": [ 7 | { 8 | "name": "id", 9 | "type": "int", 10 | "doc": "Client Id." 11 | }, 12 | { 13 | "name": "full_name", 14 | "type": { 15 | "type": "string", 16 | "avro.java.string": "String" 17 | }, 18 | "doc": "Full name." 19 | }, 20 | { 21 | "name": "email", 22 | "type": { 23 | "type": "string", 24 | "avro.java.string": "String" 25 | }, 26 | "doc": "Email." 27 | }, 28 | { 29 | "name": "accountsInactivated", 30 | "type": "int", 31 | "doc": "Number of accounts inactivated." 32 | } 33 | ] 34 | } 35 | -------------------------------------------------------------------------------- /10-quarkus-streaming/src/main/docker/Dockerfile.native: -------------------------------------------------------------------------------- 1 | #### 2 | # This Dockerfile is used in order to build a container that runs the Quarkus application in native (no JVM) mode. 3 | # 4 | # Before building the container image run: 5 | # 6 | # ./mvnw package -Pnative 7 | # 8 | # Then, build the image with: 9 | # 10 | # docker build -f src/main/docker/Dockerfile.native -t quarkus/code-with-quarkus . 11 | # 12 | # Then run the container using: 13 | # 14 | # docker run -i --rm -p 8080:8080 quarkus/code-with-quarkus 15 | # 16 | ### 17 | FROM registry.access.redhat.com/ubi8/ubi-minimal:8.6 18 | WORKDIR /work/ 19 | RUN chown 1001 /work \ 20 | && chmod "g+rwX" /work \ 21 | && chown 1001:root /work 22 | COPY --chown=1001:root target/*-runner /work/application 23 | 24 | EXPOSE 8080 25 | USER 1001 26 | 27 | CMD ["./application", "-Dquarkus.http.host=0.0.0.0"] -------------------------------------------------------------------------------- /10-quarkus-streaming/src/main/docker/Dockerfile.native-micro: -------------------------------------------------------------------------------- 1 | #### 2 | # This Dockerfile is used in order to build a container that runs the Quarkus application in native (no JVM) mode. 3 | # It uses a micro base image, tuned for Quarkus native executables. 4 | # It reduces the size of the resulting container image. 5 | # Check https://quarkus.io/guides/quarkus-runtime-base-image for further information about this image. 6 | # 7 | # Before building the container image run: 8 | # 9 | # ./mvnw package -Pnative 10 | # 11 | # Then, build the image with: 12 | # 13 | # docker build -f src/main/docker/Dockerfile.native-micro -t quarkus/code-with-quarkus . 14 | # 15 | # Then run the container using: 16 | # 17 | # docker run -i --rm -p 8080:8080 quarkus/code-with-quarkus 18 | # 19 | ### 20 | FROM quay.io/quarkus/quarkus-micro-image:2.0 21 | WORKDIR /work/ 22 | RUN chown 1001 /work \ 23 | && chmod "g+rwX" /work \ 24 | && chown 1001:root /work 25 | COPY --chown=1001:root target/*-runner /work/application 26 | 27 | EXPOSE 8080 28 | USER 1001 29 | 30 | CMD ["./application", "-Dquarkus.http.host=0.0.0.0"] -------------------------------------------------------------------------------- /10-quarkus-streaming/src/main/java/com/redhat/banking/eda/DataStreamingResource.java: -------------------------------------------------------------------------------- 1 | package com.redhat.banking.eda; 2 | 3 | import javax.ws.rs.GET; 4 | import javax.ws.rs.Path; 5 | import javax.ws.rs.Produces; 6 | import javax.ws.rs.core.MediaType; 7 | 8 | @Path("/data-streaming") 9 | public class DataStreamingResource { 10 | 11 | @GET 12 | @Produces(MediaType.TEXT_PLAIN) 13 | public String hello() { 14 | return "Hello Data Streaming!"; 15 | } 16 | 17 | } 18 | -------------------------------------------------------------------------------- /10-quarkus-streaming/src/main/java/com/redhat/banking/eda/cdc/model/AccountDB.java: -------------------------------------------------------------------------------- 1 | package com.redhat.banking.eda.cdc.model; 2 | 3 | import io.quarkus.runtime.annotations.RegisterForReflection; 4 | 5 | @RegisterForReflection 6 | public class AccountDB { 7 | 8 | public String op; 9 | public int id; 10 | public int client_id; 11 | public int region_id; 12 | public String region_code; 13 | public String sequence; 14 | public String status; 15 | 16 | public AccountDB() { 17 | } 18 | 19 | public AccountDB(int id, int client_id, int region_id, String region_code, String sequence, String status) { 20 | this.id = id; 21 | this.client_id = client_id; 22 | this.region_id = region_id; 23 | this.region_code = region_code; 24 | this.sequence = sequence; 25 | this.status = status; 26 | } 27 | 28 | @Override 29 | public String toString() { 30 | final StringBuffer sb = new StringBuffer("AccountDB{"); 31 | sb.append("id=").append(id); 32 | sb.append(", client_id=").append(client_id); 33 | sb.append(", region_id=").append(region_id); 34 | sb.append(", region_code='").append(region_code).append('\''); 35 | sb.append(", sequence='").append(sequence).append('\''); 36 | sb.append(", status='").append(status).append('\''); 37 | sb.append('}'); 38 | return sb.toString(); 39 | } 40 | 41 | } 42 | -------------------------------------------------------------------------------- /10-quarkus-streaming/src/main/java/com/redhat/banking/eda/cdc/model/ClientDB.java: -------------------------------------------------------------------------------- 1 | package com.redhat.banking.eda.cdc.model; 2 | 3 | import io.quarkus.runtime.annotations.RegisterForReflection; 4 | 5 | @RegisterForReflection 6 | public class ClientDB { 7 | 8 | public String op; 9 | public int id; 10 | public String first_name; 11 | public String last_name; 12 | public String email; 13 | 14 | public ClientDB() { 15 | } 16 | 17 | public ClientDB(int id, String first_name, String last_name, String email) { 18 | this.id = id; 19 | this.first_name = first_name; 20 | this.last_name = last_name; 21 | this.email = email; 22 | } 23 | 24 | @Override 25 | public String toString() { 26 | final StringBuffer sb = new StringBuffer("ClientDB{"); 27 | sb.append("id=").append(id); 28 | sb.append(", first_name='").append(first_name).append('\''); 29 | sb.append(", last_name='").append(last_name).append('\''); 30 | sb.append(", email='").append(email).append('\''); 31 | sb.append('}'); 32 | return sb.toString(); 33 | } 34 | 35 | } 36 | -------------------------------------------------------------------------------- /10-quarkus-streaming/src/main/java/com/redhat/banking/eda/cdc/model/MovementDB.java: -------------------------------------------------------------------------------- 1 | package com.redhat.banking.eda.cdc.model; 2 | 3 | import io.quarkus.runtime.annotations.RegisterForReflection; 4 | 5 | import java.time.Instant; 6 | 7 | @RegisterForReflection 8 | public class MovementDB { 9 | 10 | public String op; 11 | public int account_id; 12 | public int id; 13 | public Instant movement_date; 14 | public String description; 15 | public int quantity; 16 | 17 | public MovementDB() { 18 | } 19 | 20 | @Override 21 | public String toString() { 22 | final StringBuffer sb = new StringBuffer("MovementDB{"); 23 | sb.append("op='").append(op).append('\''); 24 | sb.append(", account_id=").append(account_id); 25 | sb.append(", id=").append(id); 26 | sb.append(", movement_date=").append(movement_date); 27 | sb.append(", description='").append(description).append('\''); 28 | sb.append(", quantity=").append(quantity); 29 | sb.append('}'); 30 | return sb.toString(); 31 | } 32 | 33 | } 34 | -------------------------------------------------------------------------------- /10-quarkus-streaming/src/main/java/com/redhat/banking/eda/cdc/model/RegionDB.java: -------------------------------------------------------------------------------- 1 | package com.redhat.banking.eda.cdc.model; 2 | 3 | import io.quarkus.runtime.annotations.RegisterForReflection; 4 | 5 | @RegisterForReflection 6 | public class RegionDB { 7 | 8 | public String op; 9 | public int id; 10 | public String code; 11 | public String name; 12 | public String description; 13 | 14 | public RegionDB() { 15 | } 16 | 17 | @Override 18 | public String toString() { 19 | final StringBuffer sb = new StringBuffer("RegionDB{"); 20 | sb.append("op='").append(op).append('\''); 21 | sb.append(", id=").append(id); 22 | sb.append(", code='").append(code).append('\''); 23 | sb.append(", name='").append(name).append('\''); 24 | sb.append(", description='").append(description).append('\''); 25 | sb.append('}'); 26 | return sb.toString(); 27 | } 28 | 29 | } 30 | -------------------------------------------------------------------------------- /10-quarkus-streaming/src/main/java/com/redhat/banking/eda/streams/model/Account.java: -------------------------------------------------------------------------------- 1 | package com.redhat.banking.eda.streams.model; 2 | 3 | import io.quarkus.runtime.annotations.RegisterForReflection; 4 | 5 | @RegisterForReflection 6 | public class Account { 7 | 8 | public int id; 9 | public int client_id; 10 | public int region_id; 11 | public String region_code; 12 | public String sequence; 13 | public String status; 14 | 15 | public Account() { 16 | } 17 | 18 | public Account(int id, int client_id, int region_id, String region_code, String sequence, String status) { 19 | this.id = id; 20 | this.client_id = client_id; 21 | this.region_id = region_id; 22 | this.region_code = region_code; 23 | this.sequence = sequence; 24 | this.status = status; 25 | } 26 | 27 | @Override 28 | public String toString() { 29 | final StringBuffer sb = new StringBuffer("Account{"); 30 | sb.append("id=").append(id); 31 | sb.append(", client_id=").append(client_id); 32 | sb.append(", region_id=").append(region_id); 33 | sb.append(", region_code='").append(region_code).append('\''); 34 | sb.append(", sequence='").append(sequence).append('\''); 35 | sb.append(", status='").append(status).append('\''); 36 | sb.append('}'); 37 | return sb.toString(); 38 | } 39 | 40 | } 41 | -------------------------------------------------------------------------------- /10-quarkus-streaming/src/main/java/com/redhat/banking/eda/streams/model/AccountAndClient.java: -------------------------------------------------------------------------------- 1 | package com.redhat.banking.eda.streams.model; 2 | 3 | import io.quarkus.runtime.annotations.RegisterForReflection; 4 | 5 | @RegisterForReflection 6 | public class AccountAndClient { 7 | 8 | public Account account; 9 | public Client client; 10 | 11 | public AccountAndClient() { 12 | } 13 | 14 | public AccountAndClient(Account account, Client client) { 15 | this.account = account; 16 | this.client = client; 17 | } 18 | 19 | public static AccountAndClient create(Account account, Client client) { 20 | return new AccountAndClient(account, client); 21 | } 22 | 23 | public Account account() { 24 | return account; 25 | } 26 | 27 | @Override 28 | public String toString() { 29 | return "AccountAndClient [account=" + account + ", client=" + client + "]"; 30 | } 31 | 32 | } 33 | -------------------------------------------------------------------------------- /10-quarkus-streaming/src/main/java/com/redhat/banking/eda/streams/model/AccountAndRegion.java: -------------------------------------------------------------------------------- 1 | package com.redhat.banking.eda.streams.model; 2 | 3 | import io.quarkus.runtime.annotations.RegisterForReflection; 4 | 5 | @RegisterForReflection 6 | public class AccountAndRegion { 7 | 8 | //public Account account; 9 | public AccountWithMovements account; 10 | public Region region; 11 | 12 | public AccountAndRegion() { 13 | } 14 | 15 | //public AccountAndRegion(Account account, Region region) { 16 | public AccountAndRegion(AccountWithMovements account, Region region) { 17 | this.region = region; 18 | this.account = account; 19 | } 20 | 21 | //public static AccountAndRegion create(Account account, Region region) { 22 | public static AccountAndRegion create(AccountWithMovements account, Region region) { 23 | return new AccountAndRegion(account, region); 24 | } 25 | 26 | public Region region() { return region; } 27 | 28 | //public Account account() { 29 | public AccountWithMovements account() { 30 | return account; 31 | } 32 | 33 | @Override 34 | public String toString() { 35 | final StringBuffer sb = new StringBuffer("AccountAndRegion{"); 36 | sb.append("account=").append(account); 37 | sb.append(", region=").append(region); 38 | sb.append('}'); 39 | return sb.toString(); 40 | } 41 | 42 | } 43 | -------------------------------------------------------------------------------- /10-quarkus-streaming/src/main/java/com/redhat/banking/eda/streams/model/Client.java: -------------------------------------------------------------------------------- 1 | package com.redhat.banking.eda.streams.model; 2 | 3 | import io.quarkus.runtime.annotations.RegisterForReflection; 4 | 5 | @RegisterForReflection 6 | public class Client { 7 | 8 | public int id; 9 | public String first_name; 10 | public String last_name; 11 | public String email; 12 | 13 | public Client() { 14 | } 15 | 16 | public Client(int id, String first_name, String last_name, String email) { 17 | this.id = id; 18 | this.first_name = first_name; 19 | this.last_name = last_name; 20 | this.email = email; 21 | } 22 | 23 | @Override 24 | public String toString() { 25 | final StringBuffer sb = new StringBuffer("Client{"); 26 | sb.append("id=").append(id); 27 | sb.append(", first_name='").append(first_name).append('\''); 28 | sb.append(", last_name='").append(last_name).append('\''); 29 | sb.append(", email='").append(email).append('\''); 30 | sb.append('}'); 31 | return sb.toString(); 32 | } 33 | 34 | } 35 | -------------------------------------------------------------------------------- /10-quarkus-streaming/src/main/java/com/redhat/banking/eda/streams/model/Movement.java: -------------------------------------------------------------------------------- 1 | package com.redhat.banking.eda.streams.model; 2 | 3 | import io.quarkus.runtime.annotations.RegisterForReflection; 4 | 5 | import java.time.Instant; 6 | 7 | @RegisterForReflection 8 | public class Movement { 9 | 10 | public int account_id; 11 | public int id; 12 | public Instant movement_date; 13 | public String description; 14 | public int quantity; 15 | 16 | public Movement() { 17 | } 18 | 19 | @Override 20 | public String toString() { 21 | final StringBuffer sb = new StringBuffer("Movement{"); 22 | sb.append("account_id=").append(account_id); 23 | sb.append(", id=").append(id); 24 | sb.append(", movement_date=").append(movement_date); 25 | sb.append(", description='").append(description).append('\''); 26 | sb.append(", quantity=").append(quantity); 27 | sb.append('}'); 28 | return sb.toString(); 29 | } 30 | 31 | } 32 | -------------------------------------------------------------------------------- /10-quarkus-streaming/src/main/java/com/redhat/banking/eda/streams/model/MovementAndAccount.java: -------------------------------------------------------------------------------- 1 | package com.redhat.banking.eda.streams.model; 2 | 3 | import io.quarkus.runtime.annotations.RegisterForReflection; 4 | 5 | @RegisterForReflection 6 | public class MovementAndAccount { 7 | 8 | public Movement movement; 9 | public Account account; 10 | 11 | public MovementAndAccount() { 12 | } 13 | 14 | public MovementAndAccount(Movement movement, Account account) { 15 | this.movement = movement; 16 | this.account = account; 17 | } 18 | 19 | public static MovementAndAccount create(Movement movement, Account account) { 20 | return new MovementAndAccount(movement, account); 21 | } 22 | 23 | public Movement movement() { return movement; } 24 | 25 | public Account account() { 26 | return account; 27 | } 28 | 29 | @Override 30 | public String toString() { 31 | final StringBuffer sb = new StringBuffer("MovementAndAccount{"); 32 | sb.append("movement=").append(movement); 33 | sb.append(", account=").append(account); 34 | sb.append('}'); 35 | return sb.toString(); 36 | } 37 | 38 | } 39 | -------------------------------------------------------------------------------- /10-quarkus-streaming/src/main/java/com/redhat/banking/eda/streams/model/Region.java: -------------------------------------------------------------------------------- 1 | package com.redhat.banking.eda.streams.model; 2 | 3 | import io.quarkus.runtime.annotations.RegisterForReflection; 4 | 5 | @RegisterForReflection 6 | public class Region { 7 | 8 | public int id; 9 | public String code; 10 | public String name; 11 | public String description; 12 | 13 | public Region() { 14 | } 15 | 16 | @Override 17 | public String toString() { 18 | final StringBuffer sb = new StringBuffer("Region{"); 19 | sb.append("id=").append(id); 20 | sb.append(", code='").append(code).append('\''); 21 | sb.append(", name='").append(name).append('\''); 22 | sb.append(", description='").append(description).append('\''); 23 | sb.append('}'); 24 | return sb.toString(); 25 | } 26 | 27 | } 28 | 29 | -------------------------------------------------------------------------------- /10-quarkus-streaming/src/test/java/com/redhat/banking/eda/DataStreamingResourceTest.java: -------------------------------------------------------------------------------- 1 | package com.redhat.banking.eda; 2 | 3 | import io.quarkus.test.junit.QuarkusTest; 4 | import org.junit.jupiter.api.Test; 5 | 6 | import static io.restassured.RestAssured.given; 7 | import static org.hamcrest.CoreMatchers.is; 8 | 9 | @QuarkusTest 10 | public class DataStreamingResourceTest { 11 | 12 | @Test 13 | public void testHelloEndpoint() { 14 | given() 15 | .when().get("/data-streaming") 16 | .then() 17 | .statusCode(200) 18 | .body(is("Hello Data Streaming!")); 19 | } 20 | 21 | } 22 | -------------------------------------------------------------------------------- /10-quarkus-streaming/src/test/java/com/redhat/banking/eda/NativeCloudEventResourceIT.java: -------------------------------------------------------------------------------- 1 | package com.redhat.banking.eda; 2 | 3 | import io.quarkus.test.junit.QuarkusIntegrationTest; 4 | 5 | @QuarkusIntegrationTest 6 | public class NativeCloudEventResourceIT extends CloudEventResourceTest { 7 | 8 | // Execute the same tests but in native mode. 9 | 10 | } 11 | -------------------------------------------------------------------------------- /10-quarkus-streaming/src/test/java/com/redhat/banking/eda/NativeDataStreamingResourceIT.java: -------------------------------------------------------------------------------- 1 | package com.redhat.banking.eda; 2 | 3 | import io.quarkus.test.junit.QuarkusIntegrationTest; 4 | 5 | @QuarkusIntegrationTest 6 | public class NativeDataStreamingResourceIT extends DataStreamingResourceTest { 7 | 8 | // Execute the same tests but in native mode. 9 | 10 | } 11 | -------------------------------------------------------------------------------- /11-quarkus-backend/.gitignore: -------------------------------------------------------------------------------- 1 | /target/ 2 | .project 3 | .classpath 4 | .settings/ 5 | .idea/ 6 | *.iml 7 | .vscode/ 8 | -------------------------------------------------------------------------------- /11-quarkus-backend/.mvn/wrapper/maven-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/11-quarkus-backend/.mvn/wrapper/maven-wrapper.jar -------------------------------------------------------------------------------- /11-quarkus-backend/.mvn/wrapper/maven-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.8.1/apache-maven-3.8.1-bin.zip 2 | wrapperUrl=https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar 3 | -------------------------------------------------------------------------------- /11-quarkus-backend/.s2i/environment: -------------------------------------------------------------------------------- 1 | MAVEN_S2I_ARTIFACT_DIRS=target/quarkus-app 2 | S2I_SOURCE_DEPLOYMENTS_FILTER=app lib quarkus quarkus-run.jar 3 | JAVA_OPTIONS=-Dquarkus.http.host=0.0.0.0 4 | AB_JOLOKIA_OFF=true 5 | JAVA_APP_JAR=/deployments/quarkus-run.jar 6 | 7 | -------------------------------------------------------------------------------- /11-quarkus-backend/src/main/avro/com/redhat/banking/eda/model/events/accounts/AccountBalanceLOWReached.avsc: -------------------------------------------------------------------------------- 1 | { 2 | "namespace": "com.redhat.banking.eda.model.events.accounts", 3 | "name": "AccountBalanceLOWReached", 4 | "type": "record", 5 | "doc": "Client account with a low balance.", 6 | "fields": [ 7 | { 8 | "name": "id", 9 | "type": "int", 10 | "doc": "Client Id." 11 | }, 12 | { 13 | "name": "full_name", 14 | "type": { 15 | "type": "string", 16 | "avro.java.string": "String" 17 | }, 18 | "doc": "Full name." 19 | }, 20 | { 21 | "name": "email", 22 | "type": { 23 | "type": "string", 24 | "avro.java.string": "String" 25 | }, 26 | "doc": "Email." 27 | }, 28 | { 29 | "name": "sequence", 30 | "type": { 31 | "type": "string", 32 | "avro.java.string": "String" 33 | }, 34 | "doc": "Account sequence." 35 | }, 36 | { 37 | "name": "low", 38 | "type": "boolean", 39 | "doc": "Is a Low account." 40 | } 41 | ] 42 | } 43 | -------------------------------------------------------------------------------- /11-quarkus-backend/src/main/avro/com/redhat/banking/eda/model/events/accounts/AccountBalanceNEGReached.avsc: -------------------------------------------------------------------------------- 1 | { 2 | "namespace": "com.redhat.banking.eda.model.events.accounts", 3 | "name": "AccountBalanceNEGReached", 4 | "type": "record", 5 | "doc": "Client account with a negative (or sub-zero) balance.", 6 | "fields": [ 7 | { 8 | "name": "id", 9 | "type": "int", 10 | "doc": "Client Id." 11 | }, 12 | { 13 | "name": "full_name", 14 | "type": { 15 | "type": "string", 16 | "avro.java.string": "String" 17 | }, 18 | "doc": "Full name." 19 | }, 20 | { 21 | "name": "email", 22 | "type": { 23 | "type": "string", 24 | "avro.java.string": "String" 25 | }, 26 | "doc": "Email." 27 | }, 28 | { 29 | "name": "sequence", 30 | "type": { 31 | "type": "string", 32 | "avro.java.string": "String" 33 | }, 34 | "doc": "Account sequence." 35 | }, 36 | { 37 | "name": "neg", 38 | "type": "boolean", 39 | "doc": "Is a Negative account." 40 | } 41 | ] 42 | } 43 | -------------------------------------------------------------------------------- /11-quarkus-backend/src/main/avro/com/redhat/banking/eda/model/events/accounts/AccountBalanceVIPReached.avsc: -------------------------------------------------------------------------------- 1 | { 2 | "namespace": "com.redhat.banking.eda.model.events.accounts", 3 | "name": "AccountBalanceVIPReached", 4 | "type": "record", 5 | "doc": "Client account with a balance identified as VIP.", 6 | "fields": [ 7 | { 8 | "name": "id", 9 | "type": "int", 10 | "doc": "Client Id." 11 | }, 12 | { 13 | "name": "full_name", 14 | "type": { 15 | "type": "string", 16 | "avro.java.string": "String" 17 | }, 18 | "doc": "Full name." 19 | }, 20 | { 21 | "name": "email", 22 | "type": { 23 | "type": "string", 24 | "avro.java.string": "String" 25 | }, 26 | "doc": "Email." 27 | }, 28 | { 29 | "name": "sequence", 30 | "type": { 31 | "type": "string", 32 | "avro.java.string": "String" 33 | }, 34 | "doc": "Account sequence." 35 | }, 36 | { 37 | "name": "vip", 38 | "type": "boolean", 39 | "doc": "Is a VIP account." 40 | } 41 | ] 42 | } 43 | -------------------------------------------------------------------------------- /11-quarkus-backend/src/main/avro/com/redhat/banking/eda/model/events/clients/ClientAccountsClosed.avsc: -------------------------------------------------------------------------------- 1 | { 2 | "namespace": "com.redhat.banking.eda.model.events.clients", 3 | "name": "ClientAccountsClosed", 4 | "type": "record", 5 | "doc": "Client with all accounts closed.", 6 | "fields": [ 7 | { 8 | "name": "id", 9 | "type": "int", 10 | "doc": "Client Id." 11 | }, 12 | { 13 | "name": "full_name", 14 | "type": { 15 | "type": "string", 16 | "avro.java.string": "String" 17 | }, 18 | "doc": "Full name." 19 | }, 20 | { 21 | "name": "email", 22 | "type": { 23 | "type": "string", 24 | "avro.java.string": "String" 25 | }, 26 | "doc": "Email." 27 | }, 28 | { 29 | "name": "accountsClosed", 30 | "type": "int", 31 | "doc": "Number of accounts closed." 32 | } 33 | ] 34 | } 35 | -------------------------------------------------------------------------------- /11-quarkus-backend/src/main/avro/com/redhat/banking/eda/model/events/clients/ClientAccountsInactivated.avsc: -------------------------------------------------------------------------------- 1 | { 2 | "namespace": "com.redhat.banking.eda.model.events.clients", 3 | "name": "ClientAccountsInactivated", 4 | "type": "record", 5 | "doc": "Client with all accounts inactivated.", 6 | "fields": [ 7 | { 8 | "name": "id", 9 | "type": "int", 10 | "doc": "Client Id." 11 | }, 12 | { 13 | "name": "full_name", 14 | "type": { 15 | "type": "string", 16 | "avro.java.string": "String" 17 | }, 18 | "doc": "Full name." 19 | }, 20 | { 21 | "name": "email", 22 | "type": { 23 | "type": "string", 24 | "avro.java.string": "String" 25 | }, 26 | "doc": "Email." 27 | }, 28 | { 29 | "name": "accountsInactivated", 30 | "type": "int", 31 | "doc": "Number of accounts inactivated." 32 | } 33 | ] 34 | } 35 | -------------------------------------------------------------------------------- /11-quarkus-backend/src/main/docker/Dockerfile.native: -------------------------------------------------------------------------------- 1 | #### 2 | # This Dockerfile is used in order to build a container that runs the Quarkus application in native (no JVM) mode. 3 | # 4 | # Before building the container image run: 5 | # 6 | # ./mvnw package -Pnative 7 | # 8 | # Then, build the image with: 9 | # 10 | # docker build -f src/main/docker/Dockerfile.native -t quarkus/code-with-quarkus . 11 | # 12 | # Then run the container using: 13 | # 14 | # docker run -i --rm -p 8080:8080 quarkus/code-with-quarkus 15 | # 16 | ### 17 | FROM registry.access.redhat.com/ubi8/ubi-minimal:8.6 18 | WORKDIR /work/ 19 | RUN chown 1001 /work \ 20 | && chmod "g+rwX" /work \ 21 | && chown 1001:root /work 22 | COPY --chown=1001:root target/*-runner /work/application 23 | 24 | EXPOSE 8080 25 | USER 1001 26 | 27 | CMD ["./application", "-Dquarkus.http.host=0.0.0.0"] -------------------------------------------------------------------------------- /11-quarkus-backend/src/main/docker/Dockerfile.native-micro: -------------------------------------------------------------------------------- 1 | #### 2 | # This Dockerfile is used in order to build a container that runs the Quarkus application in native (no JVM) mode. 3 | # It uses a micro base image, tuned for Quarkus native executables. 4 | # It reduces the size of the resulting container image. 5 | # Check https://quarkus.io/guides/quarkus-runtime-base-image for further information about this image. 6 | # 7 | # Before building the container image run: 8 | # 9 | # ./mvnw package -Pnative 10 | # 11 | # Then, build the image with: 12 | # 13 | # docker build -f src/main/docker/Dockerfile.native-micro -t quarkus/code-with-quarkus . 14 | # 15 | # Then run the container using: 16 | # 17 | # docker run -i --rm -p 8080:8080 quarkus/code-with-quarkus 18 | # 19 | ### 20 | FROM quay.io/quarkus/quarkus-micro-image:2.0 21 | WORKDIR /work/ 22 | RUN chown 1001 /work \ 23 | && chmod "g+rwX" /work \ 24 | && chown 1001:root /work 25 | COPY --chown=1001:root target/*-runner /work/application 26 | 27 | EXPOSE 8080 28 | USER 1001 29 | 30 | CMD ["./application", "-Dquarkus.http.host=0.0.0.0"] -------------------------------------------------------------------------------- /11-quarkus-backend/src/main/java/com/redhat/banking/eda/backend/BackendResource.java: -------------------------------------------------------------------------------- 1 | package com.redhat.banking.eda.backend; 2 | 3 | import javax.ws.rs.GET; 4 | import javax.ws.rs.Path; 5 | import javax.ws.rs.Produces; 6 | import javax.ws.rs.core.MediaType; 7 | 8 | @Path("/backend") 9 | public class BackendResource { 10 | 11 | @GET 12 | @Produces(MediaType.TEXT_PLAIN) 13 | public String hello() { 14 | return "Hello Backend!"; 15 | } 16 | 17 | } 18 | -------------------------------------------------------------------------------- /11-quarkus-backend/src/test/java/com/redhat/banking/eda/backend/BackendResourceTest.java: -------------------------------------------------------------------------------- 1 | package com.redhat.banking.eda.backend; 2 | 3 | import io.quarkus.test.junit.QuarkusTest; 4 | import org.junit.jupiter.api.Test; 5 | 6 | import static io.restassured.RestAssured.given; 7 | import static org.hamcrest.CoreMatchers.is; 8 | 9 | @QuarkusTest 10 | public class BackendResourceTest { 11 | 12 | @Test 13 | public void testHelloEndpoint() { 14 | given() 15 | .when().get("/backend") 16 | .then() 17 | .statusCode(200) 18 | .body(is("Hello Backend!")); 19 | } 20 | 21 | } -------------------------------------------------------------------------------- /11-quarkus-backend/src/test/java/com/redhat/banking/eda/backend/NativeBackendResourceIT.java: -------------------------------------------------------------------------------- 1 | package com.redhat.banking.eda.backend; 2 | 3 | import io.quarkus.test.junit.QuarkusIntegrationTest; 4 | 5 | @QuarkusIntegrationTest 6 | public class NativeBackendResourceIT extends BackendResourceTest { 7 | 8 | // Execute the same tests but in native mode. 9 | } -------------------------------------------------------------------------------- /11-quarkus-backend/src/test/java/com/redhat/banking/eda/backend/NativeCloudEventResourceIT.java: -------------------------------------------------------------------------------- 1 | package com.redhat.banking.eda.backend; 2 | 3 | import io.quarkus.test.junit.QuarkusIntegrationTest; 4 | 5 | @QuarkusIntegrationTest 6 | public class NativeCloudEventResourceIT extends CloudEventResourceTest { 7 | 8 | // Execute the same tests but in native mode. 9 | 10 | } 11 | -------------------------------------------------------------------------------- /12-deploy-serverless-native-services.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | echo "**********************************" 4 | echo "Deploying Serverless Native" 5 | echo "**********************************" 6 | 7 | oc delete kafkasource data-streaming-kafka-source 8 | oc delete kafkasource backend-kafka-source 9 | 10 | oc apply -f 15-native-services/service/ 11 | oc apply -f 15-native-services/knative-eventing/kafka-source/ 12 | -------------------------------------------------------------------------------- /12-quarkus-dashboard/.dockerignore: -------------------------------------------------------------------------------- 1 | * 2 | !target/*-runner 3 | !target/*-runner.jar 4 | !target/lib/* 5 | !target/quarkus-app/* -------------------------------------------------------------------------------- /12-quarkus-dashboard/.gitignore: -------------------------------------------------------------------------------- 1 | /target/ 2 | .project 3 | .classpath 4 | .settings/ 5 | .idea/ 6 | *.iml 7 | .vscode/ 8 | -------------------------------------------------------------------------------- /12-quarkus-dashboard/.mvn/wrapper/maven-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/.mvn/wrapper/maven-wrapper.jar -------------------------------------------------------------------------------- /12-quarkus-dashboard/.mvn/wrapper/maven-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.8.1/apache-maven-3.8.1-bin.zip 2 | wrapperUrl=https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar 3 | -------------------------------------------------------------------------------- /12-quarkus-dashboard/.s2i/environment: -------------------------------------------------------------------------------- 1 | MAVEN_S2I_ARTIFACT_DIRS=target/quarkus-app 2 | S2I_SOURCE_DEPLOYMENTS_FILTER=app lib quarkus quarkus-run.jar 3 | JAVA_OPTIONS=-Dquarkus.http.host=0.0.0.0 4 | AB_JOLOKIA_OFF=true 5 | JAVA_APP_JAR=/deployments/quarkus-run.jar -------------------------------------------------------------------------------- /12-quarkus-dashboard/get-remote-servers.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | export CLUSTER_NAME=event-bus 3 | export PROJECT_NAME=eda-workshop 4 | 5 | export KAFKA_SERVICE_HOST=$(oc -n ${PROJECT_NAME} get routes ${CLUSTER_NAME}-kafka-bootstrap -o=jsonpath='{.status.ingress[0].host}{"\n"}') 6 | export INFINISPAN_SERVICE_HOST=$(oc -n ${PROJECT_NAME} get routes/eda-infinispan-external -o=jsonpath='{.status.ingress[0].host}{"\n"}') 7 | #mvn quarkus:dev 8 | -------------------------------------------------------------------------------- /12-quarkus-dashboard/run-telepresence.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | export PROJECT_NAME=eda-workshop 4 | export DEPLOYMENT_NAME=dashboard 5 | 6 | export TELEPRESENCE_USE_OCP_IMAGE=NO 7 | oc project ${PROJECT_NAME} 8 | telepresence --swap-deployment ${DEPLOYMENT_NAME} --expose 8080 9 | -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/docker/Dockerfile.native: -------------------------------------------------------------------------------- 1 | #### 2 | # This Dockerfile is used in order to build a container that runs the Quarkus application in native (no JVM) mode. 3 | # 4 | # Before building the container image run: 5 | # 6 | # ./mvnw package -Pnative 7 | # 8 | # Then, build the image with: 9 | # 10 | # docker build -f src/main/docker/Dockerfile.native -t quarkus/code-with-quarkus . 11 | # 12 | # Then run the container using: 13 | # 14 | # docker run -i --rm -p 8080:8080 quarkus/code-with-quarkus 15 | # 16 | ### 17 | FROM registry.access.redhat.com/ubi8/ubi-minimal:8.6 18 | WORKDIR /work/ 19 | RUN chown 1001 /work \ 20 | && chmod "g+rwX" /work \ 21 | && chown 1001:root /work 22 | COPY --chown=1001:root target/*-runner /work/application 23 | 24 | EXPOSE 8080 25 | USER 1001 26 | 27 | CMD ["./application", "-Dquarkus.http.host=0.0.0.0"] -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/docker/Dockerfile.native-micro: -------------------------------------------------------------------------------- 1 | #### 2 | # This Dockerfile is used in order to build a container that runs the Quarkus application in native (no JVM) mode. 3 | # It uses a micro base image, tuned for Quarkus native executables. 4 | # It reduces the size of the resulting container image. 5 | # Check https://quarkus.io/guides/quarkus-runtime-base-image for further information about this image. 6 | # 7 | # Before building the container image run: 8 | # 9 | # ./mvnw package -Pnative 10 | # 11 | # Then, build the image with: 12 | # 13 | # docker build -f src/main/docker/Dockerfile.native-micro -t quarkus/code-with-quarkus . 14 | # 15 | # Then run the container using: 16 | # 17 | # docker run -i --rm -p 8080:8080 quarkus/code-with-quarkus 18 | # 19 | ### 20 | FROM quay.io/quarkus/quarkus-micro-image:2.0 21 | WORKDIR /work/ 22 | RUN chown 1001 /work \ 23 | && chmod "g+rwX" /work \ 24 | && chown 1001:root /work 25 | COPY --chown=1001:root target/*-runner /work/application 26 | 27 | EXPOSE 8080 28 | USER 1001 29 | 30 | CMD ["./application", "-Dquarkus.http.host=0.0.0.0"] -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/java/com/redhat/banking/eda/dashboard/DashboardResource.java: -------------------------------------------------------------------------------- 1 | package com.redhat.banking.eda.dashboard; 2 | 3 | import javax.ws.rs.GET; 4 | import javax.ws.rs.Path; 5 | import javax.ws.rs.Produces; 6 | import javax.ws.rs.core.MediaType; 7 | 8 | @Path("/dashboard") 9 | public class DashboardResource { 10 | 11 | @GET 12 | @Produces(MediaType.TEXT_PLAIN) 13 | public String hello() { 14 | return "Hello Dashboard!"; 15 | } 16 | 17 | } 18 | -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/java/com/redhat/banking/eda/dashboard/infrastructure/AggregateMetricContextInitializer.java: -------------------------------------------------------------------------------- 1 | package com.redhat.banking.eda.dashboard.infrastructure; 2 | 3 | import com.redhat.banking.eda.model.dto.AggregateMetricDTO; 4 | import org.infinispan.protostream.SerializationContextInitializer; 5 | import org.infinispan.protostream.annotations.AutoProtoSchemaBuilder; 6 | 7 | @AutoProtoSchemaBuilder(includeClasses = {AggregateMetricDTO.class}, schemaPackageName = "eda.workshop" 8 | ) 9 | interface AggregateMetricContextInitializer extends SerializationContextInitializer { 10 | } 11 | -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/java/com/redhat/banking/eda/dashboard/infrastructure/AggregateMetricDeserializer.java: -------------------------------------------------------------------------------- 1 | package com.redhat.banking.eda.dashboard.infrastructure; 2 | 3 | import com.redhat.banking.eda.model.dto.AggregateMetricDTO; 4 | import io.quarkus.kafka.client.serialization.ObjectMapperDeserializer; 5 | 6 | public class AggregateMetricDeserializer extends ObjectMapperDeserializer { 7 | 8 | public AggregateMetricDeserializer() { 9 | super(AggregateMetricDTO.class); 10 | } 11 | } -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/java/com/redhat/banking/eda/dashboard/infrastructure/AlertContextInitializer.java: -------------------------------------------------------------------------------- 1 | package com.redhat.banking.eda.dashboard.infrastructure; 2 | 3 | import com.redhat.banking.eda.model.dto.AlertDTO; 4 | import com.redhat.banking.eda.model.events.AlertVariant; 5 | import org.infinispan.protostream.SerializationContextInitializer; 6 | import org.infinispan.protostream.annotations.AutoProtoSchemaBuilder; 7 | 8 | @AutoProtoSchemaBuilder(includeClasses = {AlertDTO.class}, schemaPackageName = "eda.workshop") 9 | interface AlertContextInitializer extends SerializationContextInitializer { 10 | } 11 | -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/java/com/redhat/banking/eda/dashboard/infrastructure/AlertDeserializer.java: -------------------------------------------------------------------------------- 1 | package com.redhat.banking.eda.dashboard.infrastructure; 2 | 3 | import com.redhat.banking.eda.model.events.Alert; 4 | import io.quarkus.kafka.client.serialization.ObjectMapperDeserializer; 5 | 6 | public class AlertDeserializer extends ObjectMapperDeserializer { 7 | 8 | public AlertDeserializer() { 9 | super(Alert.class); 10 | } 11 | } -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/java/com/redhat/banking/eda/model/dto/AlertVariantDTO.java: -------------------------------------------------------------------------------- 1 | package com.redhat.banking.eda.model.dto; 2 | 3 | public enum AlertVariantDTO { 4 | 5 | SUCCESS("success"), DANGER("danger"), WARNING("warning"), INFO("info"), DEFAULT("default"); 6 | 7 | AlertVariantDTO(String value) { 8 | this.value = value; 9 | } 10 | 11 | private final String value; 12 | 13 | public String value() { 14 | return value; 15 | } 16 | 17 | } 18 | -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/200.html: -------------------------------------------------------------------------------- 1 | Patternfly Seed
-------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/asset-manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "files": { 3 | "main.css": "/static/css/main.6dea0f05.chunk.css", 4 | "main.js": "/static/js/main.4aa2b844.chunk.js", 5 | "main.js.map": "/static/js/main.4aa2b844.chunk.js.map", 6 | "runtime-main.js": "/static/js/runtime-main.020335ec.js", 7 | "runtime-main.js.map": "/static/js/runtime-main.020335ec.js.map", 8 | "static/css/2.395bb006.chunk.css": "/static/css/2.395bb006.chunk.css", 9 | "static/js/2.db173312.chunk.js": "/static/js/2.db173312.chunk.js", 10 | "static/js/2.db173312.chunk.js.map": "/static/js/2.db173312.chunk.js.map", 11 | "static/js/3.da421001.chunk.js": "/static/js/3.da421001.chunk.js", 12 | "static/js/3.da421001.chunk.js.map": "/static/js/3.da421001.chunk.js.map", 13 | "index.html": "/index.html", 14 | "static/css/2.395bb006.chunk.css.map": "/static/css/2.395bb006.chunk.css.map", 15 | "static/css/main.6dea0f05.chunk.css.map": "/static/css/main.6dea0f05.chunk.css.map", 16 | "static/js/2.db173312.chunk.js.LICENSE.txt": "/static/js/2.db173312.chunk.js.LICENSE.txt", 17 | "static/media/patternfly.css": "/static/media/pficon.eae21d83.woff" 18 | }, 19 | "entrypoints": [ 20 | "static/js/runtime-main.020335ec.js", 21 | "static/css/2.395bb006.chunk.css", 22 | "static/js/2.db173312.chunk.js", 23 | "static/css/main.6dea0f05.chunk.css", 24 | "static/js/main.4aa2b844.chunk.js" 25 | ] 26 | } -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/favicon.ico -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/RedHatDisplay-Bold.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/RedHatDisplay-Bold.eot -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/RedHatDisplay-Bold.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/RedHatDisplay-Bold.woff -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/RedHatDisplay-Medium.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/RedHatDisplay-Medium.eot -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/RedHatDisplay-Medium.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/RedHatDisplay-Medium.woff -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/RedHatDisplay-Regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/RedHatDisplay-Regular.eot -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/RedHatDisplay-Regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/RedHatDisplay-Regular.woff -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/RedHatText-Medium.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/RedHatText-Medium.eot -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/RedHatText-Medium.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/RedHatText-Medium.woff -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/RedHatText-Regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/RedHatText-Regular.eot -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/RedHatText-Regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/RedHatText-Regular.woff -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/overpass-bold-italic.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/overpass-bold-italic.eot -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/overpass-bold-italic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/overpass-bold-italic.ttf -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/overpass-bold-italic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/overpass-bold-italic.woff -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/overpass-bold-italic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/overpass-bold-italic.woff2 -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/overpass-bold.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/overpass-bold.eot -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/overpass-bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/overpass-bold.ttf -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/overpass-bold.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/overpass-bold.woff -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/overpass-bold.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/overpass-bold.woff2 -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/overpass-extrabold-italic.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/overpass-extrabold-italic.eot -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/overpass-extrabold-italic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/overpass-extrabold-italic.ttf -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/overpass-extrabold-italic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/overpass-extrabold-italic.woff -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/overpass-extrabold-italic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/overpass-extrabold-italic.woff2 -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/overpass-extrabold.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/overpass-extrabold.eot -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/overpass-extrabold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/overpass-extrabold.ttf -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/overpass-extrabold.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/overpass-extrabold.woff -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/overpass-extrabold.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/overpass-extrabold.woff2 -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/overpass-extralight-italic.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/overpass-extralight-italic.eot -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/overpass-extralight-italic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/overpass-extralight-italic.ttf -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/overpass-extralight-italic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/overpass-extralight-italic.woff -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/overpass-extralight-italic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/overpass-extralight-italic.woff2 -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/overpass-extralight.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/overpass-extralight.eot -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/overpass-extralight.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/overpass-extralight.ttf -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/overpass-extralight.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/overpass-extralight.woff -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/overpass-extralight.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/overpass-extralight.woff2 -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/overpass-heavy-italic.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/overpass-heavy-italic.eot -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/overpass-heavy-italic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/overpass-heavy-italic.ttf -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/overpass-heavy-italic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/overpass-heavy-italic.woff -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/overpass-heavy-italic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/overpass-heavy-italic.woff2 -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/overpass-heavy.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/overpass-heavy.eot -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/overpass-heavy.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/overpass-heavy.ttf -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/overpass-heavy.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/overpass-heavy.woff -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/overpass-heavy.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/overpass-heavy.woff2 -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/overpass-italic.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/overpass-italic.eot -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/overpass-italic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/overpass-italic.ttf -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/overpass-italic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/overpass-italic.woff -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/overpass-italic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/overpass-italic.woff2 -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/overpass-light-italic.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/overpass-light-italic.eot -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/overpass-light-italic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/overpass-light-italic.ttf -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/overpass-light-italic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/overpass-light-italic.woff -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/overpass-light-italic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/overpass-light-italic.woff2 -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/overpass-light.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/overpass-light.eot -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/overpass-light.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/overpass-light.ttf -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/overpass-light.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/overpass-light.woff -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/overpass-light.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/overpass-light.woff2 -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/overpass-mono-bold.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/overpass-mono-bold.eot -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/overpass-mono-bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/overpass-mono-bold.ttf -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/overpass-mono-bold.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/overpass-mono-bold.woff -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/overpass-mono-bold.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/overpass-mono-bold.woff2 -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/overpass-mono-light.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/overpass-mono-light.eot -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/overpass-mono-light.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/overpass-mono-light.ttf -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/overpass-mono-light.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/overpass-mono-light.woff -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/overpass-mono-light.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/overpass-mono-light.woff2 -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/overpass-mono-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/overpass-mono-regular.eot -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/overpass-mono-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/overpass-mono-regular.ttf -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/overpass-mono-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/overpass-mono-regular.woff -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/overpass-mono-regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/overpass-mono-regular.woff2 -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/overpass-mono-semibold.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/overpass-mono-semibold.eot -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/overpass-mono-semibold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/overpass-mono-semibold.ttf -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/overpass-mono-semibold.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/overpass-mono-semibold.woff -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/overpass-mono-semibold.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/overpass-mono-semibold.woff2 -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/overpass-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/overpass-regular.eot -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/overpass-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/overpass-regular.ttf -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/overpass-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/overpass-regular.woff -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/overpass-regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/overpass-regular.woff2 -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/overpass-semibold-italic.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/overpass-semibold-italic.eot -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/overpass-semibold-italic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/overpass-semibold-italic.ttf -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/overpass-semibold-italic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/overpass-semibold-italic.woff -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/overpass-semibold-italic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/overpass-semibold-italic.woff2 -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/overpass-semibold.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/overpass-semibold.eot -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/overpass-semibold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/overpass-semibold.ttf -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/overpass-semibold.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/overpass-semibold.woff -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/overpass-semibold.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/overpass-semibold.woff2 -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/overpass-thin-italic.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/overpass-thin-italic.eot -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/overpass-thin-italic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/overpass-thin-italic.ttf -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/overpass-thin-italic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/overpass-thin-italic.woff -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/overpass-thin-italic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/overpass-thin-italic.woff2 -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/overpass-thin.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/overpass-thin.eot -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/overpass-thin.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/overpass-thin.ttf -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/overpass-thin.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/overpass-thin.woff -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/overpass-thin.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/overpass-thin.woff2 -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/pficon.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/pficon.eot -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/pficon.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/pficon.ttf -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/pficon.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/pficon.woff -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/pficon.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/fonts/pficon.woff2 -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/images/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/images/favicon.png -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/images/pfbg_2000.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/images/pfbg_2000.jpg -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/images/pfbg_576.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/images/pfbg_576.jpg -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/images/pfbg_576@2x.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/images/pfbg_576@2x.jpg -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/images/pfbg_768.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/images/pfbg_768.jpg -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/images/pfbg_768@2x.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/images/pfbg_768@2x.jpg -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/images/pfbg_992@2x.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/images/pfbg_992@2x.jpg -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/index.html: -------------------------------------------------------------------------------- 1 | Patternfly Seed
-------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/logo192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/logo192.png -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/logo512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/logo512.png -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "short_name": "React App", 3 | "name": "Create React App Sample", 4 | "icons": [ 5 | { 6 | "src": "favicon.ico", 7 | "sizes": "64x64 32x32 24x24 16x16", 8 | "type": "image/x-icon" 9 | }, 10 | { 11 | "src": "logo192.png", 12 | "type": "image/png", 13 | "sizes": "192x192" 14 | }, 15 | { 16 | "src": "logo512.png", 17 | "type": "image/png", 18 | "sizes": "512x512" 19 | } 20 | ], 21 | "start_url": ".", 22 | "display": "standalone", 23 | "theme_color": "#000000", 24 | "background_color": "#ffffff" 25 | } 26 | -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/robots.txt: -------------------------------------------------------------------------------- 1 | # https://www.robotstxt.org/robotstxt.html 2 | User-agent: * 3 | Disallow: 4 | -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/static/css/main.6dea0f05.chunk.css: -------------------------------------------------------------------------------- 1 | body{margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Roboto","Oxygen","Ubuntu","Cantarell","Fira Sans","Droid Sans","Helvetica Neue",sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}code{font-family:source-code-pro,Menlo,Monaco,Consolas,"Courier New",monospace} 2 | /*# sourceMappingURL=main.6dea0f05.chunk.css.map */ -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/static/css/main.6dea0f05.chunk.css.map: -------------------------------------------------------------------------------- 1 | {"version":3,"sources":["webpack://src/index.css"],"names":[],"mappings":"AAAA,KACE,QAAS,CACT,mJAEY,CACZ,kCAAmC,CACnC,iCACF,CAEA,KACE,yEAEF","file":"main.6dea0f05.chunk.css","sourcesContent":["body {\n margin: 0;\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen',\n 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue',\n sans-serif;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n\ncode {\n font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New',\n monospace;\n}\n"]} -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/static/js/2.db173312.chunk.js.LICENSE.txt: -------------------------------------------------------------------------------- 1 | /* 2 | object-assign 3 | (c) Sindre Sorhus 4 | @license MIT 5 | */ 6 | 7 | /** @license React v0.20.2 8 | * scheduler.production.min.js 9 | * 10 | * Copyright (c) Facebook, Inc. and its affiliates. 11 | * 12 | * This source code is licensed under the MIT license found in the 13 | * LICENSE file in the root directory of this source tree. 14 | */ 15 | 16 | /** @license React v17.0.2 17 | * react-dom.production.min.js 18 | * 19 | * Copyright (c) Facebook, Inc. and its affiliates. 20 | * 21 | * This source code is licensed under the MIT license found in the 22 | * LICENSE file in the root directory of this source tree. 23 | */ 24 | 25 | /** @license React v17.0.2 26 | * react-jsx-runtime.production.min.js 27 | * 28 | * Copyright (c) Facebook, Inc. and its affiliates. 29 | * 30 | * This source code is licensed under the MIT license found in the 31 | * LICENSE file in the root directory of this source tree. 32 | */ 33 | 34 | /** @license React v17.0.2 35 | * react.production.min.js 36 | * 37 | * Copyright (c) Facebook, Inc. and its affiliates. 38 | * 39 | * This source code is licensed under the MIT license found in the 40 | * LICENSE file in the root directory of this source tree. 41 | */ 42 | -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/RedHatDisplay-Bold.24515e9b.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/RedHatDisplay-Bold.24515e9b.woff -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/RedHatDisplay-Bold.723874f4.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/RedHatDisplay-Bold.723874f4.eot -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/RedHatDisplay-Medium.3023e2f3.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/RedHatDisplay-Medium.3023e2f3.eot -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/RedHatDisplay-Medium.732b5ddb.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/RedHatDisplay-Medium.732b5ddb.woff -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/RedHatDisplay-Regular.77929aa7.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/RedHatDisplay-Regular.77929aa7.woff -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/RedHatDisplay-Regular.d49398e9.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/RedHatDisplay-Regular.d49398e9.eot -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/RedHatText-Medium.47a03d21.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/RedHatText-Medium.47a03d21.woff -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/RedHatText-Medium.6130c5df.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/RedHatText-Medium.6130c5df.eot -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/RedHatText-Regular.4f3a0124.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/RedHatText-Regular.4f3a0124.eot -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/RedHatText-Regular.81aade5a.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/RedHatText-Regular.81aade5a.woff -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/fa-solid-900.0239b225.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/fa-solid-900.0239b225.woff -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/fa-solid-900.81853c2f.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/fa-solid-900.81853c2f.ttf -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/fa-solid-900.c2b7c032.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/fa-solid-900.c2b7c032.woff2 -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/fa-solid-900.f06e568e.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/fa-solid-900.f06e568e.eot -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/overpass-bold-italic.89a09f63.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/overpass-bold-italic.89a09f63.woff2 -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/overpass-bold-italic.e716d42b.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/overpass-bold-italic.e716d42b.eot -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/overpass-bold-italic.e7bea4af.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/overpass-bold-italic.e7bea4af.woff -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/overpass-bold-italic.f8525e8f.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/overpass-bold-italic.f8525e8f.ttf -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/overpass-bold.4363e096.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/overpass-bold.4363e096.eot -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/overpass-bold.8aae586c.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/overpass-bold.8aae586c.woff -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/overpass-bold.b6f1c5d0.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/overpass-bold.b6f1c5d0.ttf -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/overpass-bold.cf06a52f.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/overpass-bold.cf06a52f.woff2 -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/overpass-extrabold-italic.190776b0.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/overpass-extrabold-italic.190776b0.woff2 -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/overpass-extrabold-italic.800277ea.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/overpass-extrabold-italic.800277ea.woff -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/overpass-extrabold-italic.cb9cea95.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/overpass-extrabold-italic.cb9cea95.ttf -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/overpass-extrabold-italic.d8b3d123.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/overpass-extrabold-italic.d8b3d123.eot -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/overpass-extrabold.3cd11726.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/overpass-extrabold.3cd11726.woff -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/overpass-extrabold.8584d6d2.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/overpass-extrabold.8584d6d2.woff2 -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/overpass-extrabold.b827a443.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/overpass-extrabold.b827a443.eot -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/overpass-extrabold.e1287366.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/overpass-extrabold.e1287366.ttf -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/overpass-extralight-italic.269ca6c8.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/overpass-extralight-italic.269ca6c8.woff2 -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/overpass-extralight-italic.73ab4e0a.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/overpass-extralight-italic.73ab4e0a.ttf -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/overpass-extralight-italic.bc0502ff.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/overpass-extralight-italic.bc0502ff.woff -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/overpass-extralight-italic.ed58ea35.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/overpass-extralight-italic.ed58ea35.eot -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/overpass-extralight.4fa1de25.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/overpass-extralight.4fa1de25.eot -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/overpass-extralight.60cc25d4.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/overpass-extralight.60cc25d4.woff2 -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/overpass-extralight.bd43f64c.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/overpass-extralight.bd43f64c.ttf -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/overpass-extralight.c0276d79.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/overpass-extralight.c0276d79.woff -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/overpass-heavy-italic.093a7994.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/overpass-heavy-italic.093a7994.eot -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/overpass-heavy-italic.23fc486b.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/overpass-heavy-italic.23fc486b.woff -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/overpass-heavy-italic.57649dc0.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/overpass-heavy-italic.57649dc0.ttf -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/overpass-heavy-italic.95fdf61f.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/overpass-heavy-italic.95fdf61f.woff2 -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/overpass-heavy.11855d3f.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/overpass-heavy.11855d3f.woff2 -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/overpass-heavy.b5204399.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/overpass-heavy.b5204399.ttf -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/overpass-heavy.d88b6664.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/overpass-heavy.d88b6664.eot -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/overpass-heavy.e9d4a1e9.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/overpass-heavy.e9d4a1e9.woff -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/overpass-italic.35d01efd.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/overpass-italic.35d01efd.woff -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/overpass-italic.86ba5ba4.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/overpass-italic.86ba5ba4.eot -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/overpass-italic.ab4371a5.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/overpass-italic.ab4371a5.woff2 -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/overpass-italic.feb05e55.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/overpass-italic.feb05e55.ttf -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/overpass-light-italic.0a4b379b.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/overpass-light-italic.0a4b379b.ttf -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/overpass-light-italic.34d0b884.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/overpass-light-italic.34d0b884.eot -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/overpass-light-italic.59058fe4.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/overpass-light-italic.59058fe4.woff2 -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/overpass-light-italic.ac78b4f2.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/overpass-light-italic.ac78b4f2.woff -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/overpass-light.176868e8.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/overpass-light.176868e8.eot -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/overpass-light.1c45e67b.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/overpass-light.1c45e67b.ttf -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/overpass-light.54923114.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/overpass-light.54923114.woff -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/overpass-light.675eb11f.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/overpass-light.675eb11f.woff2 -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/overpass-mono-bold.4515cb64.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/overpass-mono-bold.4515cb64.eot -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/overpass-mono-bold.69bf841b.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/overpass-mono-bold.69bf841b.woff2 -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/overpass-mono-bold.7799d940.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/overpass-mono-bold.7799d940.woff -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/overpass-mono-bold.95cea96f.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/overpass-mono-bold.95cea96f.ttf -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/overpass-mono-light.0be5ef4b.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/overpass-mono-light.0be5ef4b.eot -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/overpass-mono-light.99464515.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/overpass-mono-light.99464515.woff2 -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/overpass-mono-light.bfe9360a.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/overpass-mono-light.bfe9360a.ttf -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/overpass-mono-light.d6b6f0c7.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/overpass-mono-light.d6b6f0c7.woff -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/overpass-mono-regular.053c8708.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/overpass-mono-regular.053c8708.eot -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/overpass-mono-regular.64fbabef.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/overpass-mono-regular.64fbabef.ttf -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/overpass-mono-regular.7150021d.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/overpass-mono-regular.7150021d.woff2 -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/overpass-mono-regular.db4223ab.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/overpass-mono-regular.db4223ab.woff -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/overpass-mono-semibold.4bc0afcd.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/overpass-mono-semibold.4bc0afcd.ttf -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/overpass-mono-semibold.54b2e338.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/overpass-mono-semibold.54b2e338.woff2 -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/overpass-mono-semibold.7d5ee241.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/overpass-mono-semibold.7d5ee241.eot -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/overpass-mono-semibold.88ade95a.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/overpass-mono-semibold.88ade95a.woff -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/overpass-regular.14f8b4c8.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/overpass-regular.14f8b4c8.eot -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/overpass-regular.246cf166.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/overpass-regular.246cf166.woff2 -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/overpass-regular.5e774351.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/overpass-regular.5e774351.ttf -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/overpass-regular.817d3df1.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/overpass-regular.817d3df1.woff -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/overpass-semibold-italic.323f30b3.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/overpass-semibold-italic.323f30b3.woff2 -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/overpass-semibold-italic.750945a4.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/overpass-semibold-italic.750945a4.ttf -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/overpass-semibold-italic.755f9be7.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/overpass-semibold-italic.755f9be7.eot -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/overpass-semibold-italic.8d723ad7.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/overpass-semibold-italic.8d723ad7.woff -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/overpass-semibold.1353c4d0.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/overpass-semibold.1353c4d0.eot -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/overpass-semibold.164a0ab4.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/overpass-semibold.164a0ab4.woff -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/overpass-semibold.61142d93.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/overpass-semibold.61142d93.woff2 -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/overpass-semibold.61cde743.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/overpass-semibold.61cde743.ttf -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/overpass-thin-italic.3278ae4a.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/overpass-thin-italic.3278ae4a.woff2 -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/overpass-thin-italic.4a854797.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/overpass-thin-italic.4a854797.eot -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/overpass-thin-italic.4e730341.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/overpass-thin-italic.4e730341.ttf -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/overpass-thin-italic.ac4ae66c.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/overpass-thin-italic.ac4ae66c.woff -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/overpass-thin.06037ca2.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/overpass-thin.06037ca2.woff2 -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/overpass-thin.0a38e7ad.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/overpass-thin.0a38e7ad.ttf -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/overpass-thin.1904b4e1.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/overpass-thin.1904b4e1.woff -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/overpass-thin.8337c6c0.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/overpass-thin.8337c6c0.eot -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/pfbg_2000.3b693db0.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/pfbg_2000.3b693db0.jpg -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/pfbg_576.b64efab6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/pfbg_576.b64efab6.jpg -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/pfbg_576@2x.08322afb.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/pfbg_576@2x.08322afb.jpg -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/pfbg_768.56faebea.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/pfbg_768.56faebea.jpg -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/pfbg_768@2x.eea28e73.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/pfbg_768@2x.eea28e73.jpg -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/pfbg_992@2x.30e8d31f.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/pfbg_992@2x.30e8d31f.jpg -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/pficon.0c3175ea.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/pficon.0c3175ea.ttf -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/pficon.bbfff1d4.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/pficon.bbfff1d4.woff2 -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/pficon.cf20f640.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/pficon.cf20f640.eot -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/pficon.eae21d83.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/resources/META-INF/resources/static/media/pficon.eae21d83.woff -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/webapp/.editorconfig: -------------------------------------------------------------------------------- 1 | # Editor configuration, see http://editorconfig.org 2 | root = true 3 | 4 | [*] 5 | charset = utf-8 6 | indent_style = space 7 | indent_size = 2 8 | insert_final_newline = true 9 | trim_trailing_whitespace = true 10 | 11 | [*.snap] 12 | max_line_length = off 13 | trim_trailing_whitespace = false 14 | 15 | [*.md] 16 | max_line_length = off 17 | trim_trailing_whitespace = false 18 | -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/webapp/.gitignore: -------------------------------------------------------------------------------- 1 | **/node_modules 2 | dist 3 | yarn-error.log 4 | stats.json 5 | coverage 6 | storybook-static 7 | .DS_Store 8 | .idea 9 | .env 10 | -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/webapp/.prettierignore: -------------------------------------------------------------------------------- 1 | package.json 2 | -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/webapp/.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "singleQuote": true, 3 | "printWidth": 120 4 | } 5 | -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/webapp/.storybook/config.ts: -------------------------------------------------------------------------------- 1 | import { configure } from '@storybook/react'; 2 | import '@patternfly/react-core/dist/styles/base.css'; 3 | 4 | // automatically import all files ending in *.stories.tsx 5 | const req = require.context('../stories', true, /\.stories\.tsx$/); 6 | 7 | function loadStories() { 8 | req.keys().forEach(req); 9 | } 10 | 11 | configure(loadStories, module); 12 | -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/webapp/.storybook/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../tsconfig.json" 3 | } -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/webapp/.storybook/webpack.config.js: -------------------------------------------------------------------------------- 1 | const path = require('path'); 2 | const TsconfigPathsPlugin = require('tsconfig-paths-webpack-plugin'); 3 | const appConfig = require('../webpack.common'); 4 | const { stylePaths } = require("../stylePaths"); 5 | 6 | module.exports = ({ config, mode }) => { 7 | config.module.rules = []; 8 | config.module.rules.push(...appConfig(mode).module.rules); 9 | config.module.rules.push({ 10 | test: /\.css$/, 11 | include: [ 12 | path.resolve(__dirname, '../node_modules/@storybook'), 13 | ...stylePaths 14 | ], 15 | use: ["style-loader", "css-loader"] 16 | }); 17 | config.module.rules.push({ 18 | test: /\.tsx?$/, 19 | include: path.resolve(__dirname, '../src'), 20 | use: [ 21 | require.resolve('react-docgen-typescript-loader'), 22 | ], 23 | }) 24 | config.resolve.plugins = [ 25 | new TsconfigPathsPlugin({ 26 | configFile: path.resolve(__dirname, "../tsconfig.json") 27 | }) 28 | ]; 29 | config.resolve.extensions.push('.ts', '.tsx'); 30 | return config; 31 | }; 32 | -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/webapp/LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2018 Red Hat 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/webapp/__mocks__/fileMock.js: -------------------------------------------------------------------------------- 1 | module.exports = 'test-file-stub'; 2 | -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/webapp/__mocks__/styleMock.js: -------------------------------------------------------------------------------- 1 | module.exports = {}; 2 | -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/webapp/dr-surge.js: -------------------------------------------------------------------------------- 1 | const fs = require('fs'); 2 | const path = require('path'); 3 | const indexPath = path.resolve(__dirname, 'dist/index.html'); 4 | const targetFilePath = path.resolve(__dirname, 'dist/200.html'); 5 | // ensure we have bookmarkable url's when publishing to surge 6 | // https://surge.sh/help/adding-a-200-page-for-client-side-routing 7 | fs.createReadStream(indexPath).pipe(fs.createWriteStream(targetFilePath)); 8 | -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/webapp/src/app/NotFound/NotFound.tsx: -------------------------------------------------------------------------------- 1 | import * as React from 'react'; 2 | import { ExclamationTriangleIcon } from '@patternfly/react-icons'; 3 | import { 4 | PageSection, 5 | Title, 6 | Button, 7 | EmptyState, 8 | EmptyStateIcon, 9 | EmptyStateBody, 10 | } from '@patternfly/react-core'; 11 | import { useHistory } from 'react-router-dom'; 12 | 13 | const NotFound: React.FunctionComponent = () => { 14 | function GoHomeBtn() { 15 | const history = useHistory(); 16 | function handleClick() { 17 | history.push('/'); 18 | } 19 | return ( 20 | 21 | ); 22 | } 23 | 24 | return ( 25 | 26 | 27 | 28 | 29 | 404 Page not found 30 | 31 | 32 | We didn't find a page that matches the address you navigated to. 33 | 34 | 35 | 36 | 37 | ) 38 | }; 39 | 40 | export { NotFound }; 41 | -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/webapp/src/app/Settings/General/GeneralSettings.tsx: -------------------------------------------------------------------------------- 1 | import * as React from 'react'; 2 | import { PageSection, Title } from '@patternfly/react-core'; 3 | 4 | const GeneralSettings: React.FunctionComponent = () => ( 5 | 6 | 7 | General Settings Page Title 8 | 9 | 10 | ); 11 | 12 | export { GeneralSettings }; 13 | -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/webapp/src/app/Settings/Profile/ProfileSettings.tsx: -------------------------------------------------------------------------------- 1 | import * as React from 'react'; 2 | import { PageSection, Title } from '@patternfly/react-core'; 3 | 4 | const ProfileSettings: React.FunctionComponent = () => ( 5 | 6 | 7 | Profile Settings Page Title 8 | 9 | 10 | ); 11 | 12 | export { ProfileSettings }; 13 | -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/webapp/src/app/__snapshots__/app.test.tsx.snap: -------------------------------------------------------------------------------- 1 | // Jest Snapshot v1, https://goo.gl/fbAQLP 2 | 3 | exports[`App tests should render default App component 1`] = ` 4 | 5 | 6 | 7 | 8 | 9 | `; 10 | -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/webapp/src/app/app.css: -------------------------------------------------------------------------------- 1 | html, body, #root { 2 | height: 100%; 3 | } 4 | -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/webapp/src/app/index.tsx: -------------------------------------------------------------------------------- 1 | import * as React from 'react'; 2 | import '@patternfly/react-core/dist/styles/base.css'; 3 | import { BrowserRouter as Router } from 'react-router-dom'; 4 | import { AppLayout } from '@app/AppLayout/AppLayout'; 5 | import { AppRoutes } from '@app/routes'; 6 | import '@app/app.css'; 7 | 8 | const App: React.FunctionComponent = () => ( 9 | 10 | 11 | 12 | 13 | 14 | ); 15 | 16 | export default App; 17 | -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/webapp/src/app/utils/useDocumentTitle.ts: -------------------------------------------------------------------------------- 1 | import * as React from 'react'; 2 | 3 | // a custom hook for setting the page title 4 | export function useDocumentTitle(title: string) { 5 | React.useEffect(() => { 6 | const originalTitle = document.title; 7 | document.title = title; 8 | 9 | return () => { 10 | document.title = originalTitle; 11 | }; 12 | }, [title]); 13 | } 14 | -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/webapp/src/app/utils/utils.ts: -------------------------------------------------------------------------------- 1 | export function accessibleRouteChangeHandler() { 2 | return window.setTimeout(() => { 3 | const mainContainer = document.getElementById('primary-app-container'); 4 | if (mainContainer) { 5 | mainContainer.focus(); 6 | } 7 | }, 50); 8 | } 9 | -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/webapp/src/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/12-quarkus-dashboard/src/main/webapp/src/favicon.png -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/webapp/src/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Patternfly Seed 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/webapp/src/index.tsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import ReactDOM from "react-dom"; 3 | import App from '@app/index'; 4 | 5 | if (process.env.NODE_ENV !== "production") { 6 | const config = { 7 | rules: [ 8 | { 9 | id: 'color-contrast', 10 | enabled: false 11 | } 12 | ] 13 | }; 14 | // eslint-disable-next-line @typescript-eslint/no-var-requires, no-undef 15 | const axe = require("react-axe"); 16 | axe(React, ReactDOM, 1000, config); 17 | } 18 | 19 | ReactDOM.render(, document.getElementById("root") as HTMLElement); 20 | -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/webapp/src/typings.d.ts: -------------------------------------------------------------------------------- 1 | declare module '*.png'; 2 | declare module '*.jpg'; 3 | declare module '*.jpeg'; 4 | declare module '*.gif'; 5 | declare module '*.svg'; 6 | declare module '*.css'; 7 | declare module '*.wav'; 8 | declare module '*.mp3'; 9 | declare module '*.m4a'; 10 | declare module '*.rdf'; 11 | declare module '*.ttl'; 12 | declare module '*.pdf'; 13 | -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/webapp/stories/Dashboard.stories.tsx: -------------------------------------------------------------------------------- 1 | import * as React from 'react'; 2 | import { storiesOf } from '@storybook/react'; 3 | import { withInfo } from '@storybook/addon-info'; 4 | import { Dashboard } from '@app/Dashboard/Dashboard'; 5 | 6 | const stories = storiesOf('Components', module); 7 | stories.addDecorator(withInfo); 8 | stories.add( 9 | 'Dashboard', 10 | () => , 11 | { info: { inline: true } } 12 | ); 13 | -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/webapp/stories/Support.stories.tsx: -------------------------------------------------------------------------------- 1 | import * as React from 'react'; 2 | import { storiesOf } from '@storybook/react'; 3 | import { withInfo } from '@storybook/addon-info'; 4 | import { Support } from '@app/Support/Support'; 5 | 6 | const stories = storiesOf('Components', module); 7 | stories.addDecorator(withInfo); 8 | stories.add( 9 | 'Support', 10 | () => , 11 | { info: { inline: true } } 12 | ); 13 | -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/webapp/stylePaths.js: -------------------------------------------------------------------------------- 1 | const path = require('path'); 2 | module.exports = { 3 | stylePaths: [ 4 | path.resolve(__dirname, 'src'), 5 | path.resolve(__dirname, 'node_modules/patternfly'), 6 | path.resolve(__dirname, 'node_modules/@patternfly/patternfly'), 7 | path.resolve(__dirname, 'node_modules/@patternfly/react-styles/css'), 8 | path.resolve(__dirname, 'node_modules/@patternfly/react-core/dist/styles/base.css'), 9 | path.resolve(__dirname, 'node_modules/@patternfly/react-core/dist/esm/@patternfly/patternfly'), 10 | path.resolve(__dirname, 'node_modules/@patternfly/react-core/node_modules/@patternfly/react-styles/css'), 11 | path.resolve(__dirname, 'node_modules/@patternfly/react-table/node_modules/@patternfly/react-styles/css'), 12 | path.resolve(__dirname, 'node_modules/@patternfly/react-inline-edit-extension/node_modules/@patternfly/react-styles/css') 13 | ] 14 | } 15 | -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/webapp/test-setup.js: -------------------------------------------------------------------------------- 1 | import { configure } from 'enzyme'; 2 | import ReactSeventeenAdapter from '@wojtekmaj/enzyme-adapter-react-17'; 3 | 4 | configure({ adapter: new ReactSeventeenAdapter() }); 5 | -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/webapp/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "baseUrl": ".", 4 | "rootDir": ".", 5 | "outDir": "dist", 6 | "module": "esnext", 7 | "target": "es5", 8 | "lib": ["es6", "dom"], 9 | "sourceMap": true, 10 | "jsx": "react", 11 | "moduleResolution": "node", 12 | "forceConsistentCasingInFileNames": true, 13 | "noImplicitReturns": true, 14 | "noImplicitThis": true, 15 | "noImplicitAny": false, 16 | "allowJs": true, 17 | "esModuleInterop": true, 18 | "allowSyntheticDefaultImports": true, 19 | "strict": true, 20 | "paths": { 21 | "@app/*": ["src/app/*"], 22 | "@assets/*": ["node_modules/@patternfly/react-core/dist/styles/assets/*"] 23 | }, 24 | "importHelpers": true, 25 | "skipLibCheck": true 26 | }, 27 | "include": [ 28 | "**/*.ts", 29 | "**/*.tsx", 30 | "**/*.jsx", 31 | "**/*.js" 32 | ], 33 | "exclude": ["node_modules"] 34 | } 35 | -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/webapp/webpack.dev.js: -------------------------------------------------------------------------------- 1 | const path = require('path'); 2 | const { merge } = require("webpack-merge"); 3 | const common = require("./webpack.common.js"); 4 | const { stylePaths } = require("./stylePaths"); 5 | const HOST = process.env.HOST || "localhost"; 6 | const PORT = process.env.PORT || "9000"; 7 | 8 | module.exports = merge(common('development'), { 9 | mode: "development", 10 | devtool: "eval-source-map", 11 | devServer: { 12 | contentBase: "./dist", 13 | host: HOST, 14 | port: PORT, 15 | compress: true, 16 | inline: true, 17 | historyApiFallback: true, 18 | overlay: true, 19 | open: true, 20 | proxy: { 21 | '/alerts': 'http://localhost:8080', 22 | '/aggregate-metrics': 'http://localhost:8080', 23 | '/particles': 'http://localhost:8080' 24 | } 25 | }, 26 | module: { 27 | rules: [ 28 | { 29 | test: /\.css$/, 30 | include: [ 31 | ...stylePaths 32 | ], 33 | use: ["style-loader", "css-loader"] 34 | } 35 | ] 36 | } 37 | }); 38 | -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/main/webapp/webpack.prod.js: -------------------------------------------------------------------------------- 1 | const path = require('path'); 2 | const { merge } = require('webpack-merge'); 3 | const common = require('./webpack.common.js'); 4 | const { stylePaths } = require("./stylePaths"); 5 | const MiniCssExtractPlugin = require('mini-css-extract-plugin'); 6 | const CssMinimizerPlugin = require('css-minimizer-webpack-plugin'); 7 | const TerserJSPlugin = require('terser-webpack-plugin'); 8 | 9 | module.exports = merge(common('production'), { 10 | mode: 'production', 11 | devtool: 'source-map', 12 | optimization: { 13 | minimizer: [ 14 | new TerserJSPlugin({}), 15 | new CssMinimizerPlugin({ 16 | minimizerOptions: { 17 | preset: ['default', { mergeLonghand: false }] 18 | } 19 | }) 20 | ], 21 | }, 22 | plugins: [ 23 | new MiniCssExtractPlugin({ 24 | filename: '[name].css', 25 | chunkFilename: '[name].bundle.css' 26 | }) 27 | ], 28 | module: { 29 | rules: [ 30 | { 31 | test: /\.css$/, 32 | include: [ 33 | ...stylePaths 34 | ], 35 | use: [MiniCssExtractPlugin.loader, 'css-loader'] 36 | } 37 | ] 38 | } 39 | }); 40 | -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/test/java/com/redhat/banking/eda/dashboard/DashboardResourceTest.java: -------------------------------------------------------------------------------- 1 | package com.redhat.banking.eda.dashboard; 2 | 3 | //import com.redhat.banking.eda.dashboard.resources.CacheResource; 4 | //import io.quarkus.test.common.QuarkusTestResource; 5 | import io.quarkus.test.junit.QuarkusTest; 6 | import org.junit.jupiter.api.Test; 7 | 8 | import static io.restassured.RestAssured.given; 9 | import static org.hamcrest.CoreMatchers.is; 10 | 11 | @QuarkusTest 12 | //@QuarkusTestResource(CacheResource.class) 13 | public class DashboardResourceTest { 14 | 15 | @Test 16 | public void testHelloEndpoint() { 17 | given() 18 | .when().get("/dashboard") 19 | .then() 20 | .statusCode(200) 21 | .body(is("Hello Dashboard!")); 22 | } 23 | 24 | } 25 | -------------------------------------------------------------------------------- /12-quarkus-dashboard/src/test/java/com/redhat/banking/eda/dashboard/NativeDashboardResourceIT.java: -------------------------------------------------------------------------------- 1 | package com.redhat.banking.eda.dashboard; 2 | 3 | import io.quarkus.test.junit.QuarkusIntegrationTest; 4 | 5 | @QuarkusIntegrationTest 6 | public class NativeDashboardResourceIT extends DashboardResourceTest { 7 | 8 | // Execute the same tests but in native mode. 9 | } 10 | -------------------------------------------------------------------------------- /14-serverless/knative-eventing/kafka-source/backend-kafka-source.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: sources.knative.dev/v1beta1 2 | kind: KafkaSource 3 | metadata: 4 | name: backend-kafka-source 5 | labels: 6 | app.kubernetes.io/instance: backend-kafka-source 7 | app.kubernetes.io/part-of: eda-workshop-serverless 8 | kafkasources.sources.knative.dev/key-type: int 9 | spec: 10 | consumerGroup: backend-knative-group 11 | bootstrapServers: 12 | - event-bus-kafka-bootstrap.eda-workshop.svc:9092 13 | topics: 14 | - 'eda.data.accounts' 15 | - 'eda.data.clients' 16 | - 'eda.data.movements' 17 | - 'eda.events.domain.clients' 18 | - 'eda.events.domain.accounts' 19 | - 'eda.events.domain.regions' 20 | sink: 21 | ref: 22 | apiVersion: serving.knative.dev/v1 23 | kind: Service 24 | name: backend-serverless 25 | -------------------------------------------------------------------------------- /14-serverless/knative-eventing/kafka-source/data-streaming-kafka-source.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: sources.knative.dev/v1beta1 2 | kind: KafkaSource 3 | metadata: 4 | name: data-streaming-kafka-source 5 | labels: 6 | app.kubernetes.io/instance: data-streaming-kafka-source 7 | app.kubernetes.io/part-of: eda-workshop-serverless 8 | kafkasources.sources.knative.dev/key-type: string 9 | spec: 10 | consumerGroup: data-streaming-knative-group 11 | bootstrapServers: 12 | - event-bus-kafka-bootstrap.eda-workshop.svc:9092 13 | topics: 14 | - 'dbserver02.enterprise.accounts' 15 | - 'dbserver02.enterprise.clients' 16 | - 'dbserver02.enterprise.movements' 17 | - 'dbserver02.enterprise.regions' 18 | sink: 19 | ref: 20 | apiVersion: serving.knative.dev/v1 21 | kind: Service 22 | name: data-streaming-serverless 23 | -------------------------------------------------------------------------------- /14-serverless/knative-eventing/kafka-source/event-display-kafka-source.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: sources.knative.dev/v1beta1 2 | kind: KafkaSource 3 | metadata: 4 | name: event-display-kafka-source 5 | spec: 6 | consumerGroup: event-display-knative-group 7 | bootstrapServers: 8 | - event-bus-kafka-bootstrap.eda-workshop.svc:9092 9 | topics: 10 | - eda.cloud.events 11 | sink: 12 | ref: 13 | apiVersion: serving.knative.dev/v1 14 | kind: Service 15 | name: event-display-serverless 16 | -------------------------------------------------------------------------------- /14-serverless/knative-eventing/knative-eventing.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | apiVersion: operator.knative.dev/v1alpha1 3 | kind: KnativeEventing 4 | metadata: 5 | name: knative-eventing 6 | namespace: knative-eventing 7 | spec: {} 8 | -------------------------------------------------------------------------------- /14-serverless/knative-eventing/knative-kafka.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: operator.serverless.openshift.io/v1alpha1 2 | kind: KnativeKafka 3 | metadata: 4 | name: knative-kafka 5 | namespace: knative-eventing 6 | spec: 7 | channel: 8 | bootstrapServers: event-bus-kafka-bootstrap.eda-workshop.svc:9092 9 | enabled: true 10 | source: 11 | enabled: true 12 | -------------------------------------------------------------------------------- /14-serverless/knative-eventing/topics/eda-cloud-events-topic.yml: -------------------------------------------------------------------------------- 1 | apiVersion: kafka.strimzi.io/v1beta1 2 | kind: KafkaTopic 3 | metadata: 4 | labels: 5 | strimzi.io/cluster: event-bus 6 | name: eda.cloud.events 7 | spec: 8 | config: 9 | min.insync.replicas: "2" 10 | retention.ms: "7200000" 11 | segment.bytes: "1073741824" 12 | partitions: 10 13 | replicas: 3 14 | -------------------------------------------------------------------------------- /14-serverless/knative-serving/knative-serving.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | apiVersion: operator.knative.dev/v1alpha1 3 | kind: KnativeServing 4 | metadata: 5 | name: knative-serving 6 | namespace: knative-serving 7 | spec: 8 | config: 9 | autoscaler: 10 | scale-to-zero-grace-period: "45s" 11 | # Determines the minimum amount of time that the last pod will remain active after 12 | # the Autoscaler decides to scale pods to zero. 13 | scale-to-zero-pod-retention-period: "5s" 14 | container-concurrency-target-default: "100" # Default 100 15 | container-concurrency-target-percentage: "75" # Default 70 16 | -------------------------------------------------------------------------------- /14-serverless/service/backend-service.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | apiVersion: serving.knative.dev/v1 3 | kind: Service 4 | metadata: 5 | name: backend-serverless 6 | labels: 7 | app.kubernetes.io/instance: data-streaming-serverless 8 | app.kubernetes.io/part-of: eda-workshop-serverless 9 | spec: 10 | template: 11 | metadata: 12 | annotations: 13 | # Determines the minimum amount of time that the last pod will remain active after 14 | # the Autoscaler decides to scale pods to zero. 15 | autoscaling.knative.dev/scaleToZeroPodRetentionPeriod: "5s" 16 | labels: 17 | app.kubernetes.io/instance: backend-serverless 18 | app.kubernetes.io/part-of: eda-workshop-serverless 19 | spec: 20 | containers: 21 | - image: image-registry.openshift-image-registry.svc:5000/eda-workshop/backend:2.16.5-SNAPSHOT 22 | resources: 23 | requests: 24 | cpu: 500m 25 | memory: 1Gi 26 | limits: 27 | cpu: 1 28 | memory: 1Gi 29 | -------------------------------------------------------------------------------- /14-serverless/service/dashboard-service.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | apiVersion: serving.knative.dev/v1 3 | kind: Service 4 | metadata: 5 | name: dashboard-serverless 6 | annotations: 7 | app.openshift.io/connects-to: eda-infinispan 8 | labels: 9 | app.kubernetes.io/instance: data-streaming-serverless 10 | app.kubernetes.io/part-of: eda-workshop-serverless 11 | spec: 12 | template: 13 | metadata: 14 | annotations: 15 | app.openshift.io/connects-to: eda-infinispan 16 | labels: 17 | app.kubernetes.io/instance: dashboard-serverless 18 | app.kubernetes.io/part-of: eda-workshop-serverless 19 | spec: 20 | containers: 21 | - image: image-registry.openshift-image-registry.svc:5000/eda-workshop/dashboard:2.16.5-SNAPSHOT 22 | resources: 23 | requests: 24 | cpu: 500m 25 | memory: 1Gi 26 | limits: 27 | cpu: 1 28 | memory: 1Gi -------------------------------------------------------------------------------- /14-serverless/service/event-display-service.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | apiVersion: serving.knative.dev/v1 3 | kind: Service 4 | metadata: 5 | name: event-display-serverless 6 | spec: 7 | template: 8 | spec: 9 | containers: 10 | - image: quay.io/openshift-knative/knative-eventing-sources-event-display:latest 11 | -------------------------------------------------------------------------------- /15-native-services/knative-eventing/kafka-source/backend-native-kafka-source.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: sources.knative.dev/v1beta1 2 | kind: KafkaSource 3 | metadata: 4 | name: backend-native-kafka-source 5 | labels: 6 | app.kubernetes.io/instance: backend-native-kafka-source 7 | app.kubernetes.io/part-of: eda-workshop-serverless-native 8 | kafkasources.sources.knative.dev/key-type: int 9 | spec: 10 | consumerGroup: backend-native-knative-group 11 | bootstrapServers: 12 | - event-bus-kafka-bootstrap.eda-workshop.svc:9092 13 | topics: 14 | - 'eda.data.accounts' 15 | - 'eda.data.clients' 16 | - 'eda.data.movements' 17 | - 'eda.events.domain.clients' 18 | - 'eda.events.domain.accounts' 19 | - 'eda.events.domain.regions' 20 | sink: 21 | ref: 22 | apiVersion: serving.knative.dev/v1 23 | kind: Service 24 | name: backend-native-serverless 25 | -------------------------------------------------------------------------------- /15-native-services/knative-eventing/kafka-source/data-streaming-native-kafka-source.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: sources.knative.dev/v1beta1 2 | kind: KafkaSource 3 | metadata: 4 | name: data-streaming-native-kafka-source 5 | labels: 6 | app.kubernetes.io/instance: data-streaming-native-kafka-source 7 | app.kubernetes.io/part-of: eda-workshop-serverless-native 8 | kafkasources.sources.knative.dev/key-type: string 9 | spec: 10 | consumerGroup: data-streaming-native-knative-group 11 | bootstrapServers: 12 | - event-bus-kafka-bootstrap.eda-workshop.svc:9092 13 | topics: 14 | - 'dbserver02.enterprise.accounts' 15 | - 'dbserver02.enterprise.clients' 16 | - 'dbserver02.enterprise.movements' 17 | - 'dbserver02.enterprise.regions' 18 | sink: 19 | ref: 20 | apiVersion: serving.knative.dev/v1 21 | kind: Service 22 | name: data-streaming-native-serverless 23 | -------------------------------------------------------------------------------- /15-native-services/service/backend-native-service.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | apiVersion: serving.knative.dev/v1 3 | kind: Service 4 | metadata: 5 | name: backend-native-serverless 6 | labels: 7 | app.kubernetes.io/instance: backend-native-serverless 8 | app.kubernetes.io/part-of: eda-workshop-serverless-native 9 | spec: 10 | template: 11 | metadata: 12 | annotations: 13 | # Determines the minimum amount of time that the last pod will remain active after 14 | # the Autoscaler decides to scale pods to zero. 15 | autoscaling.knative.dev/scaleToZeroPodRetentionPeriod: "5s" 16 | labels: 17 | app.kubernetes.io/instance: backend-native-serverless 18 | app.kubernetes.io/part-of: eda-workshop-serverless-native 19 | spec: 20 | containers: 21 | - image: quay.io/eda-workshop/backend:2.16.5-SNAPSHOT 22 | resources: 23 | requests: 24 | cpu: 500m 25 | memory: 128Mi 26 | limits: 27 | cpu: 1 28 | memory: 512Mi 29 | -------------------------------------------------------------------------------- /15-native-services/service/dashboard-native-service.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | apiVersion: serving.knative.dev/v1 3 | kind: Service 4 | metadata: 5 | name: dashboard-native-serverless 6 | annotations: 7 | app.openshift.io/connects-to: eda-infinispan 8 | labels: 9 | app.kubernetes.io/instance: dashboard-native-serverless 10 | app.kubernetes.io/part-of: eda-workshop-serverless-native 11 | spec: 12 | template: 13 | metadata: 14 | annotations: 15 | app.openshift.io/connects-to: eda-infinispan 16 | labels: 17 | app.kubernetes.io/instance: dashboard-native-serverless 18 | app.kubernetes.io/part-of: eda-workshop-serverless-native 19 | spec: 20 | containers: 21 | - image: quay.io/eda-workshop/dashboard:2.16.5-SNAPSHOT 22 | resources: 23 | requests: 24 | cpu: 500m 25 | memory: 128Mi 26 | limits: 27 | cpu: 1 28 | memory: 512Mi 29 | -------------------------------------------------------------------------------- /98-query-enterprise-data.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | echo "*************************************" 4 | echo "Query data from Enterprise Database" 5 | echo "*************************************" 6 | 7 | # Get the name of the MySQL pod 8 | MYSQL_POD=$(oc get pods -l deployment=mysql-enterprise -n eda-workshop -o jsonpath='{.items[0].metadata.name}') 9 | echo "MySQL pod found: $MYSQL_POD" 10 | 11 | # Define the local file path and remote file path 12 | LOCAL_FILE=./03-databases/mysql/enterprise/data/enterprise-query.sql 13 | REMOTE_FILE=/tmp/data.sql 14 | 15 | # Copy the script file to the pod container 16 | oc cp $LOCAL_FILE $MYSQL_POD:$REMOTE_FILE 17 | 18 | # Run the script inside the container 19 | oc exec $MYSQL_POD -- bash -c 'mysql -u mysqluser -pmysqlpw enterprise < /tmp/data.sql' 20 | -------------------------------------------------------------------------------- /img/eda-logical-architecture.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/img/eda-logical-architecture.png -------------------------------------------------------------------------------- /img/eda-physical-architecture.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atarazana/eda-workshop/5608cb45d4a3cf44bc16835bdb32c8cdf9b08b62/img/eda-physical-architecture.png --------------------------------------------------------------------------------