{"id":24649067,"url":"https://github.com/ow2-proactive/scheduling-abstraction-layer","last_synced_at":"2025-05-13T11:06:24.651Z","repository":{"id":146325190,"uuid":"490725713","full_name":"ow2-proactive/scheduling-abstraction-layer","owner":"ow2-proactive","description":"This module allows users to interact with a running ProActive Scheduler and Resource Manager in lazy mode.","archived":false,"fork":false,"pushed_at":"2025-04-25T15:37:56.000Z","size":3110,"stargazers_count":2,"open_issues_count":4,"forks_count":6,"subscribers_count":5,"default_branch":"master","last_synced_at":"2025-05-13T11:06:19.406Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mpl-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ow2-proactive.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2022-05-10T14:10:39.000Z","updated_at":"2025-04-24T17:13:32.000Z","dependencies_parsed_at":null,"dependency_job_id":"43194673-371e-440f-8123-56a66082d913","html_url":"https://github.com/ow2-proactive/scheduling-abstraction-layer","commit_stats":null,"previous_names":[],"tags_count":18,"template":false,"template_full_name":"ow2-proactive/yamt","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ow2-proactive%2Fscheduling-abstraction-layer","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ow2-proactive%2Fscheduling-abstraction-layer/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ow2-proactive%2Fscheduling-abstraction-layer/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ow2-proactive%2Fscheduling-abstraction-layer/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ow2-proactive","download_url":"https://codeload.github.com/ow2-proactive/scheduling-abstraction-layer/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":253929362,"owners_count":21985802,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-01-25T17:15:39.221Z","updated_at":"2025-05-13T11:06:24.639Z","avatar_url":"https://github.com/ow2-proactive.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Scheduling Abstraction Layer (SAL)\n\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n[![Java 8](https://img.shields.io/badge/Java-8-blue.svg)](https://www.oracle.com/java/technologies/javase-jdk8-downloads.html)\n[![Spring Boot](https://img.shields.io/badge/Spring%20Boot-1.3.8-brightgreen.svg)](https://spring.io/projects/spring-boot)\n\nScheduling Abstraction Layer (SAL) is an abstraction layer initially developed as part of the EU project Morphemic ([morphemic.cloud](https://morphemic.cloud/)). Its development continued through the Nebulous EU project ([nebulouscloud.eu](https://nebulouscloud.eu/)). SAL aims to enhance the usability of [ProActive Scheduler \u0026 Resource Manager](https://proactive.activeeon.com/) by providing abstraction and additional features.\n\n## Table of Contents\n\n- [1. Introduction](#1-introduction)\n- [2. Installation](#2-installation)\n- [3. Usage](#3-usage)\n- [4. Contributing](#4-contributing)\n- [5. License](#5-license)\n\n## 1. Introduction\n\nSAL is a project initially developed under the Morphemic project, part of the EU's Horizon 2020 initiative. Its development continued through the Nebulous EU project, part of Horizon Europe inititative. It offers an abstraction layer on top of the ProActive Scheduler \u0026 Resource Manager, making it easier for users to interact with the scheduler and take advantage of its features. Seamlessly supporting REST calls and direct communication with the Proactive API, SAL empowers users to harness the scheduler's capabilities. Whether you want to use SAL as a microservice or deploy it as a Docker container, this repository provides the necessary resources to get you started.\n\n## 2. Installation\n\nSAL can be deployed in several ways: as a standalone microservice, within a Docker container, or as a Kubernetes pod. Below are the detailed instructions for each deployment method.\n\n### 2.1. Deploying SAL as a Standalone Microservice\nIn this deployment approach, SAL runs directly on the host system using a Java runtime environment. Management is handled manually, meaning you control the environment, dependencies, and configurations. However, this method is limited by the capabilities of the host system, and scaling requires manually setting up additional instances. The deployment relies on the host's network settings, with external access and load balancing also requiring manual setup. This approach is suitable for development, small-scale deployments, or when direct control over the runtime environment is necessary.\n#### 2.1.1. Build and Run the Microservice\n\nTo use SAL as a microservice, follow these steps:\n\n1. Clone the SAL repository:\n\n```bash\n# pull the SAL project\ngit clone https://github.com/ow2-proactive/scheduling-abstraction-layer.git\n\n# go to your SAL folder\ncd scheduling-abstraction-layer\n```\n\n2. Build the microservice:\n\n```bash\n# Apply Spotless code formatting, clean the project, and build using Gradle\n./gradlew spotlessApply clean build --refresh-dependencies\n\n# Use the '-x test' flag at the end to skip running tests during the build process\n```\nThe generated `.war` file will be located at: `scheduling-abstraction-layer/sal-service/build/libs/scheduling-abstraction-layer-xxx.war`.\n\n3. Run the Microservice:\n```bash\n./gradlew bootRun\n```\nThis command starts SAL as microservice on default port `8080` on your host.\n\n#### 2.1.2. Client Library\n\nThe `sal-common` Java library provides class definitions for SAL concepts.  It can be added to gradle projects by adding the following into `build.gradle`:\n\n```groovy\nrepositories {\n\n    maven {\n        url 'http://repository.activeeon.com/content/groups/proactive/'\n        allowInsecureProtocol = true\n    }\n}\ndependencies {\n    // SAL client library\n    implementation 'org.ow2.proactive:sal-common:13.1.0-SNAPSHOT'\n}\n```\n\n### 2.2. Deploying SAL as a Docker Container\nIn this deployment approach, SAL runs inside a Docker container, providing a consistent environment across different systems. Management is handled via Docker commands or Docker Compose, with containerization isolating the application and its dependencies. While SAL can scale across multiple containers on the same machine, scalability is limited to a single-node setup unless additional tools are utilized. Docker manages networking, though more complex configurations may require manual setup. This method is ideal for consistent deployment across various environments, easier distribution, and meeting basic scalability needs.\n\nSAL can be deployed as a Docker container either by using a pre-built image or by building your own.\n\n\n#### 2.2.1. Using Pre-Built SAL Docker Images\n\nYou can pull the latest or a specific version of the SAL Docker image from remote Docker repository [DockerHub](https://hub.docker.com/r/activeeon/sal/tags):\n- `activeeon/sal:dev`: The latest daily release of SAL.\n- `activeeon/sal:dev-YYYY-MM-DD`: A specific version of SAL released on a particular date. Replace YYYY-MM-DD with the desired date to pull that specific version.\n\nTo pull an image:\n\n```bash\ndocker pull activeeon/sal:dev\n```\n\n#### 2.2.2. Run SAL as Docker Container:\n\n**Prerequisites:** Docker installed on your machine.\n\n1. Edit the Docker Compose File:\n\n* Open [docker-compose.yaml](https://github.com/ow2-proactive/scheduling-abstraction-layer/blob/master/docker/docker-compose.yaml)\n\n* Specify which version of the Kubernetes cluster you will deploy. Default scripts set for deployment are for k8s.\n\n\n```bash\n    CLUSTER_TYPE: \"k8s\"  # (defult) or \"k3s\"\n```\n\n* Setup connection to the ProActive scheduler\n\n```bash\nsal:\n      #Set up connection to ProActive server (PWS) by introducing the ip address of ProActive server with the port, as well as the access credential:\n      PWS_URL: \u003cCHANGE_ME\u003e\n      PWS_USERNAME: \u003cCHANGE_ME\u003e\n      PWS_PASSWORD: \u003cCHANGE_ME\u003e\n```\n\n* Setup which SAL image will be used:\n\n```bash\nsal:\n#Set up image to be used for SAL from https://hub.docker.com/r/activeeon/sal/tags\nimage: activeeon/sal:test\n```\nNOTE: It is possible to generate automatically an image from the `.war` file generated in section 2.1.1. In this case the image tag (e.g. test) should not exist in DockerHub repository.\n\n* Setup database PASSWORD :\n```bash\nenvironment:\n      MYSQL_ROOT_PASSWORD: PASSWORD\n```\n```bash\n      DB_USERNAME: root\n      DB_PASSWORD: PASSWORD\n```\n```bash\n    healthcheck:\n      test: [ \"CMD\", \"mariadb-admin\" , \"ping\", \"-h\", \"localhost\", \"--password=PASSWORD\" ]\n```\n\n* Setup SAL ports :\n```bash\nsal:\n    ports:\n      - \"8088:8080\" # sal service ports\n      - \"9001:9001\" # sal-pda service ports for debugging\n```\n\n* In a case you do not want to use the deployment with persistent volume comment following:\n```bash\n    # Comment this if you do not want to attach a volume for persistent data storage:\n    volumes:\n      - mariadb_data:/var/lib/mysql\n```\n\n```bash\n#Comment this part if you do not want to include volume for peristant data storage\nvolumes:\n  mariadb_data: {}\n```\n\nNOTE: In a case of committing improvements to the SAL project, you will need to keep your local changes to the `docker-compose.yaml` untracked. Use the following command:\n```bash\ngit update-index --assume-unchanged docker/docker-compose.yaml\n```\n2. Build and Start the Containers:\n\nOpen a terminal and Build SAL as described in [Section 2.1.1](https://github.com/ow2-proactive/scheduling-abstraction-layer/blob/master/README.md#211-build-and-run-the-microservice)\nNavigate to the directory containing your `docker-compose.yaml` (e.g. docker) file to start docker containers:\n```bash\ncd .\\docker\\\ndocker-compose up --build\n```\nNOTE: Make sure that previous containers are removed (Step 4)\n\nNOTE: Note that there will be some unresolved warning and errors during built of SAL, which do not have impact on its functionality.\nIn principle when you see this line in build log the SAL containers should be up and running:\n`_ERROR WebSocketTransport:231 - WebSocket Handshake Failed_`\n3. Verify Deployment\n\nCheck the status of the containers\n\n```bash\ndocker-compose ps\n```\n\n4. Stop and Remove Containers\n\n```bash\ndocker-compose down\n```\n\n### 2.3. Deploying SAL as a Kubernetes Pod\n\nIn this deployment approach, SAL is deployed as a pod within a Kubernetes cluster, which offers advanced orchestration and management features.\nKubernetes automatically handles deployment, scaling, and operations across a cluster of nodes, providing native support for horizontal scaling, automatic load balancing, and self-healing capabilities. The robust networking solutions provided by Kubernetes include service discovery, Ingress controllers, and built-in load balancing. This method is ideal for large-scale, production environments where high availability, scalability, and complex orchestration are required.\n\nTo deploy SAL on Kubernetes, it is to use a Docker image as described in [Section 2.2.1](https://github.com/ow2-proactive/scheduling-abstraction-layer/blob/master/README.md#221-using-pre-built-sal-docker-images) from remote Docker repository [DockerHub](https://hub.docker.com/r/activeeon/sal/tags). You can then deploy this image as a Kubernetes pod.\n\n**Prerequisites:** Kubernetes cluster (local or cloud-based) and kubectl CLI installed and configured.\n\n1. Edit Kubernetes Deployment and Service Manifests:\n\nEdit [sal.yaml](https://github.com/ow2-proactive/scheduling-abstraction-layer/blob/master/deployment/sal.yaml)\nSetup ProActive connection, SAL image and ports as described in Section 2.2.2. Step 1\n\nNOTE: Update `/path/to/scripts` to the path where your scripts are located on the host machine.\n\n2. Deploy to Kubernetes:\n\nApply the deployment and service manifests to your Kubernetes cluster:\n\n```bash\nkubectl apply -f sal.yaml\n```\n\n3. Verify Deployment:\n\n* Check the status of the pods:\n```bash\nkubectl get pods\n```\n\n* Check the status of the services:\n```bash\nkubectl get services\n```\n\n* Access SAL using the service's external IP or via a port-forward:\n```bash\nkubectl port-forward service/sal-service 8080:8080\n```\n\n4. Clean Up:\n\nTo delete the deployment and service:\n```bash\nkubectl delete -f sal.yaml\n```\n\n## 3. Usage\nOnce SAL is deployed, you can interact with it via its REST API, monitor its operation, and view logs to ensure everything is functioning correctly. Here’s how to use SAL effectively.\n\n### 3.1. Using SAL REST Endpoints\nSAL exposes several REST API endpoints which serves as interfaces that you can use to interact with the ProActive Scheduler \u0026 Resource Manager. For detailed information on each endpoint, please go [here](https://github.com/ow2-proactive/scheduling-abstraction-layer/blob/master/endpoints/README.md).\n\nTo showcase usage [Connect](https://github.com/ow2-proactive/scheduling-abstraction-layer/blob/master/endpoints/1-connection-endpoints.md#11--connect-endpoint) endpoint will use, which should have SAL protocol, host, port and ProActive  username and password set as it was done in deployment `.yaml` files.\n\nBelow are the instructions for connecting to and disconnecting from the ProActive server, using tools such as Postman or cURL.\n\n#### 3.1.1 Using Postman\n\nDownload and install [Postman](https://www.postman.com/) if you haven’t already.\n\n* Set Up Request:\n  * URL: `http://localhost:8088/sal/pagateway/connect`\n  * Method: POST\n  * Headers: None\n  * Body:\n```bash\n{\n\"username\": {{myLogin}},\n\"password\": {{myPassword}}\n}\n```\n* Send Request: Click the \"Send\" button to execute the request and review the response.\n* Replay: A text format reply containing the session ID.\n\n#### 3.1.1 Using cURL\n\n* Open Terminal\n* Execute cURL Command:\n```bash\n{\ncurl -X POST \"http://localhost:8080/sal/pagateway/connect\" \\\n  --header \"Content-Type: application/json\" \\\n  -d '{\"username\": \"Proactive server username\", \"password\": \"Proactive server password\"}'\n\n}\n```\n* Replay: A text format reply containing the session ID.\n\n### 3.2. View SAL logs\n\n#### 3.2.1 View Logs for SAL deployed as Docker Container\nWhen SAL is deployed as a Docker Container like in [Section 2.2](https://github.com/ow2-proactive/scheduling-abstraction-layer/blob/master/README.md#22-deploying-sal-as-a-docker-container), you can view its logs using Docker commands.\n\n* Launch your command line interface (CLI).\n* List Running Containers: To find the container name or ID, use:\n```bash\ndocker ps\n```\nLook for the container name `myComposeSAL` or the name you used.\n* View SAL general Logs:\n```bash\ndocker logs myComposeSAL\n```\n* View SAL database general Logs:\n```bash\ndocker logs myComposeMariaDB\n```\n\n* View detail SAL Logs inside container:\n```bash\ndocker exec -it myComposeSAL /bin/bash #To enter the SAL container’s shell\ncd logs\ncat scheduling-abstraction-layer.log #View detail logs\n```\n* Query SAL Database i.e. MariaDB:\n```bash\ndocker exec -it myComposeMariaDB /bin/bash\n# Replace \u003cpassword\u003e with the password you've set for the MariaDB root user\nmariadb -uroot -p\u003cpassword\u003e proactive\n\n```\n\n\n#### 3.2.1 View Logs for SAL deployed as Kubernetes Pod\nWhen SAL is deployed as a Kubernetes pod, you can access the logs using `kubectl` commands.\n* Get the name of the SAL pod\n```bash\nkubectl get po -o wide\n```\n* View SAL general Logs:\n```bash\n# Replace \u003cnamespace\u003e with the appropriate namespace and \u003cpod-name\u003e with the actual pod name obtained in previous step\nkubectl -n \u003cnamespace\u003e logs \u003cpod-name\u003e sal\n```\n* View detail SAL Logs inside container:\n```bash\nkubectl exec -it \u003cpod-name\u003e -c sal -- /bin/bash #To enter the SAL container’s shell\ncd logs\ncat scheduling-abstraction-layer.log\n```\n\n* Query SAL Database i.e. MariaDB:\n```bash\nkubectl exec -it \u003cpod-name\u003e -c mariadb -- mariadb -uroot -p\u003cpassword\u003e proactive\n#Replace \u003cpassword\u003e with the appropriate MariaDB root password.\n```\n### 3.3. Restarting SAL Service\n\nRestarting the SAL service can be necessary for applying configuration changes, recovering from issues, or for routine maintenance. Note that on the restart SAL logs and database will be erased. Below are the instructions for restarting SAL, both when deployed as a Docker container and as a Kubernetes pod.\n\n#### 3.3.1 Restarting SAL as a Docker Container\n\nIf SAL is deployed as a Docker container using `docker-compose.yaml`, you can restart the service using the following methods:\n\n2. Restart a Specific Container:\n\n\nTo restart just the SAL container without affecting other services (like MariaDB):\n```bash\ndocker restart myComposeSAL\n```\n\n2. Restart All Services in Docker Compose:\n   To restart all services defined in your docker-compose.yaml (including the database):\n\n```bash\ndocker-compose restart\n```\n\n3. Rebuild and Restart SAL:\n   If you need to apply changes to the Docker image or configuration:\n\n```bash\ndocker-compose up --build -d\n```\nThis command will rebuild the containers if necessary and restart them in detached mode.\n\n#### 3.3.2 Restarting SAL as a Kubernetes Pod\n\nWhen SAL is deployed as a Kubernetes pod, you can restart the service by following these methods:\n\n1. Rolling Restart (Preferred Method):\n   Kubernetes allows for a rolling restart, which updates the pods one by one without downtime:\n\n```bash\nkubectl rollout restart deployment/sal-deployment\n#Replace sal-deployment with the actual name of your SAL deployment.\n```\n\n2. Manual Pod Deletion:\n   Alternatively, you can delete the existing pod(s) manually, and Kubernetes will automatically recreate them:\n\n\n```bash\nkubectl get pods\n# Copy sal pod name:\nkubectl delete pod \u003csal-pod-name\u003e\n```\n\nKubernetes will automatically recreate the pod using the existing deployment configuration.\n\n3. Scaling the Deployment to Zero and Back:\n   Another method to restart SAL in Kubernetes is by scaling the deployment down to zero replicas and then scaling it back up to the desired number of replicas. This effectively stops and restarts the pods:\n\n```bash\nkubectl get deployment\n# Replace \u003cnamespace\u003e with the appropriate namespace (e.g., nebulous-cd) and \u003csal-deployment-name\u003e with your SAL deployment name.\nkubectl scale -n \u003cnamespace\u003e --replicas=0 deploy/\u003csal-deployment-name\u003e\nkubectl scale -n \u003cnamespace\u003e --replicas=1 deploy/\u003csal-deployment-name\u003e\n```\n### 3.4. Checking SAL Deployment\nBelow are steps for checking a SAL deployment, including checking image versions, container status, and overall health, for both Docker Compose and Kubernetes deployments.\n\n#### 3.4. Checking SAL Deployment in Docker Compose\n1. Check Running Containers:\n\nEnsure all services defined in your `docker-compose.yaml` file are running:\n```bash\ndocker-compose ps\n```\nThis command shows the status of each container, including whether they are up and running.\n\n2. Check Image Versions:\n\nVerify that the correct images and versions are used for each service:\n\n```bash\ndocker inspect \u003ccontainer_name_or_id\u003e | grep Image\n# Replace \u003ccontainer_name_or_id\u003e with the container's name or ID (e.g., myComposeSAL, myComposeMariaDB).\n```\nThis will display the images used by each container.\n\n\n4. Check Health of Containers:\n\nIf a health check is defined in the `docker-compose.yaml` (as in the MariaDB service):\n\n```bash\ndocker inspect --format='{{json .State.Health.Status}}' \u003ccontainer_name_or_id\u003e\n```\nThis will show if the container is healthy, unhealthy, or starting.\n\n#### 3.4.2 Checking SAL Deployment in Kubernetes\nFor Kubernetes, more advanced checks are available due to the nature of Kubernetes as an orchestrator.\n\n1. Check Running Pods:\n\nList all running pods and their statuses in the relevant namespace:\n\n```bash\nkubectl get pods -n \u003cnamespace\u003e\n# Replace \u003cnamespace\u003e with the appropriate namespace\n```\nThis command will show if the pods are running, pending, or in error.\n\n2. Check Deployment Details:\n\nVerify that the correct images are being used in your deployment:\n\n```bash\nkubectl get deploy -n \u003cnamespace\u003e \u003cdeployment_name\u003e -o yaml | grep image\n```\nThis command extracts the image versions specified in the deployment YAML.\n\n\n3. Check Pod Health and Status:\n\nCheck the status and details of the running pods:\n\n```bash\nkubectl describe pod -n \u003cnamespace\u003e \u003cpod_name\u003e\n```\nThis provides a detailed description of the pod’s state, including events, container statuses, and any errors.\n\n4. Check Service Endpoints:\n\nEnsure that the SAL services are correctly exposed and accessible:\n\n```bash\nkubectl get svc -n \u003cnamespace\u003e\n```\n\nThis command lists all services in the namespace, showing their external IPs, ports, and status.\n\n5. Check Resource Utilization:\n\nMonitor resource usage to ensure the deployment is operating within expected parameters:\n\n```bash\nkubectl top pods -n \u003cnamespace\u003e\n```\n\nThis shows CPU and memory usage, helping you identify any resource constraints or anomalies.\n\n### 3.5. Debugging SAL\n\n1. Ensure that SAL is running\n\nSAL need to be deployed and prepared for usage as described in [Section 2](https://github.com/ow2-proactive/scheduling-abstraction-layer/blob/master/README.md#2-installation).\n\n* **SAL in Docker:**\n\nThe `docker-compose.yaml` file includes a debugging service for SAL, exposing port 9001 by default (see [Section 2.2)](https://github.com/ow2-proactive/scheduling-abstraction-layer/blob/master/README.md#22-deploying-sal-as-a-docker-container). This port is typically configured for remote debugging using the Java Debug Wire Protocol (JDWP) so it is sufficient that SAL container is running.\n\n* **SAL as Kubernetes Pod:**\n\nThe `sal.yaml` file for Kubernetes also includes configuration for the debugging service, exposing port 9001 by default (see [Section 2.3](https://github.com/ow2-proactive/scheduling-abstraction-layer/blob/master/README.md#23-deploying-sal-as-a-kubernetes-pod)). To use debugging service To access the debugging port on your local machine, set up port forwarding from your Kubernetes pod to your local machine:\n```bash\nkubectl port-forward deployment/sal 9001:9001\n#In case the SAL is not deployed as sal, replace it with the actual name of your SAL deployment.\n```\nAnother approach is to use sal-pda service which is deployed by default using `sal.yaml`:\n```bash\nkubectl get services\n#Use the actual name of sal-pda-service and ports with ports as defined in deployment script\nkubectl port-forward service/sal-pda-service 9001:9001\n```\n\n2. Configure Your IDE for Remote Debugging:\n\nIn IntelliJ IDEA:\n* Go to Run \u003e Edit Configurations.\n* Click the + button and select Remote JVM Debug.\n* Set the Host to `localhost` and the Port to `9001` or the one which is used for SAL deployment. In a case there is problem localhost can be replaced with your IP address.\n* Set the Debugger mode to Attach to remote JVM.\n* Click Apply and then OK\n\n3. Start Debugging:\n\nWith your IDE configured, you can now start a debugging session.The following message should show:\n```bash\nConnected to the target VM, address: 'localhost:9001', transport: 'socket'\n```\nUse SAL endpoints as described in [Section 3.1.](https://github.com/ow2-proactive/scheduling-abstraction-layer/blob/master/README.md#31-using-sal-rest-endpoints) and set breakpoints in your code. As the SAL service executes, your IDE will stop at these breakpoints, allowing you to inspect variables, step through code, and diagnose issues.\nDuring debugging is advised to check SAL logs as described in [Section 3.2.](https://github.com/ow2-proactive/scheduling-abstraction-layer/blob/master/README.md#32-view-sal-logs)\n\n## 4. Contributing\n\nContributions to SAL are welcome! If you have any bug fixes, improvements, or new features to propose, please feel free to open a pull request. For major changes, it is recommended to discuss your ideas with the maintainers first.\n\n## 5. License\n\nThe Scheduling Abstraction Layer (SAL) is distributed under the [Mozilla Public License (MPL) 2.0.](https://www.mozilla.org/en-US/MPL/2.0/) This open-source license allows for flexibility in use, modification, and distribution of the code, while also ensuring that any modifications to the SAL source code must remain open and accessible under the same license.\n\nThe MPL 2.0 provides a balance between open-source freedom and the ability to combine SAL with proprietary software, as long as changes made to the original code are made available under the MPL terms. For more details on the conditions and terms, please refer to the full [LICENSE](https://github.com/ow2-proactive/scheduling-abstraction-layer/blob/master/LICENSE) file in the SAL repository.\n\nNote: To use SAL in conjunction with the [ProActive Scheduler \u0026 Resource Manager](https://proactive.activeeon.com/), a separate ProActive license is required. ProActive is licensed separately, and its usage terms must be respected in addition to those of the SAL under MPL 2.0.\n\n\n\n---\n\nThank you for using Scheduling Abstraction Layer (SAL)! If you encounter any issues or have questions, please feel free to open an issue in the repository. We hope SAL enhances your experience with ProActive Scheduler \u0026 Resource Manager!\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fow2-proactive%2Fscheduling-abstraction-layer","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fow2-proactive%2Fscheduling-abstraction-layer","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fow2-proactive%2Fscheduling-abstraction-layer/lists"}