Awesome Open Source
Awesome Open Source

:projectKey: optaweb-employee-rostering :sonarBadge: image:https://sonarcloud.io/api/project_badges/measure?project={projectKey} :sonarLink: link="https://sonarcloud.io/dashboard?id={projectKey}"

= Employee Rostering Optimization as a Service

image:https://travis-ci.com/kiegroup/optaweb-employee-rostering.svg?branch=main[ "Build Status", link="https://travis-ci.com/kiegroup/optaweb-employee-rostering"] image:https://img.shields.io/badge/stackoverflow-ask_question-orange.svg?logo=stackoverflow[ "Ask question on Stack Overflow", link="https://stackoverflow.com/questions/tagged/optaweb-employee-rostering"] image:https://img.shields.io/badge/zulip-join_chat-brightgreen.svg?logo=zulip[ "Join Zulip Chat", link="https://kie.zulipchat.com/#narrow/stream/232679-optaplanner"]

{sonarBadge}&metric=alert_status["Quality Gate Status", {sonarLink}] {sonarBadge}&metric=reliability_rating["Reliability Rating", {sonarLink}] {sonarBadge}&metric=security_rating["Security Rating", {sonarLink}] {sonarBadge}&metric=sqale_rating["Maintainability Rating", {sonarLink}] {sonarBadge}&metric=ncloc["Lines of Code", {sonarLink}] {sonarBadge}&metric=coverage["Coverage", {sonarLink}]

An end-to-end https://www.optaplanner.org/[OptaPlanner] web application ready to deploy on https://www.openshift.com/[OpenShift 4].

See https://www.youtube.com/watch?v=sOWC4qrXxFk[the video demo].

== Building

Build the project with maven in the project's root directory:

[source,shell]

mvn clean install -DskipTests -DskipITs

== Running

After building the project, run the application with:

[source,shell]

java -jar optaweb-employee-rostering-standalone/target/quarkus-app/quarkus-run.jar

Then open http://localhost:8080/ to see the web application.

Alternatively, run npm start in optaweb-employee-rostering-frontend to start the frontend in one terminal, and run mvn quarkus:dev in optaweb-employee-rostering-backend to start the backend in another terminal.

=== Use a different port

To run on an another port use -Dquarkus.http.port=...:

[source,shell]

java -Dquarkus.http.port=18080 -jar optaweb-employee-rostering-standalone/target/quarkus-app/quarkus-run.jar

== Benchmark Application

After building the project above, run the benchmark application with:

[source,shell]

java -jar optaweb-employee-rostering-benchmark/target/quarkus-app/quarkus-run.jar

Note: make sure to run the project application and benchmark application on different ports if they are run simultaneously.

After benchmarking is complete, a benchmark report will be generated in the local/benchmarkReport directory. Open the index.html file in your browser to view the benchmark results.

=== Configure the benchmarker

To configure the benchmarker, modify the employeeRosteringBenchmarkConfig.xml file found in the optaweb-employee-rostering-benchmark/src/main/resources directory. Make sure to rebuild the project after modifying the config file for the benchmarker changes to be applied.

Refer to the https://docs.optaplanner.org/latestFinal/optaplanner-docs/html_single/index.html#benchmarker[OptaPlanner Docs] for more information on benchmark tweaking.

== Running on a local OpenShift cluster

Use https://developers.redhat.com/products/codeready-containers[Red Hat CodeReady Containers] to easily set up a single-node OpenShift 4 cluster on your local computer.

.Prerequisites You have successfully built the project with Maven.

.Procedure

  1. To install CRC, follow the https://code-ready.github.io/crc/[Getting Started Guide].

  2. When the cluster has started,

a. add oc command-line interface to your $PATH: + [source,shell]

eval $(crc oc-env)

b. log in as "developer".

  1. Create a new project

[source,subs="quotes"]

oc new-project project_name

  1. Run the script:

[source,shell]

./runOnOpenShift.sh

=== Updating the deployed application with local changes

==== Backend

Change the source code and build the backend module with Maven. Then start OpenShift build:

[source,shell]

cd optaweb-employee-rostering-backend oc start-build backend --from-dir=. --follow

==== Frontend

Change the source code and build the frontend module with npm. Then start OpenShift build:

[source,shell]

cd optaweb-employee-rostering-frontend oc start-build frontend --from-dir=docker --follow

== Development

=== Code formatter

Both IntelliJ and Eclipse formatters are available here: https://github.com/kiegroup/droolsjbpm-build-bootstrap/tree/main/ide-configuration

=== Backend

Configure your IDE to run the main class, which is in org.optaweb.employeerostering.OptaWebEmployeeRosteringApplication in optaweb-employee-rostering-backend repository.

=== Frontend

Run npm install and then npm start in the optaweb-employee-rostering-frontend directory.


Get A Weekly Email With Trending Projects For These Topics
No Spam. Unsubscribe easily at any time.
java (31,724
typescript (11,988
reactjs (1,129
openshift (104
scheduling (66