Cloud Assess
An open-source tool to automate the assessment of the environmental impacts of cloud services.
https://github.com/kleis-technology/cloud-assess
Category: Consumption
Sub Category: Computation and Communication
Last synced: about 9 hours ago
JSON representation
Repository metadata
A nice piece of backend to report the enviromental footprint of your Cloud services to your clients.
- Host: GitHub
- URL: https://github.com/kleis-technology/cloud-assess
- Owner: kleis-technology
- Created: 2023-09-19T15:33:25.000Z (over 2 years ago)
- Default Branch: main
- Last Pushed: 2026-03-20T01:16:22.000Z (about 1 month ago)
- Last Synced: 2026-03-23T19:01:32.010Z (about 1 month ago)
- Language: Jupyter Notebook
- Homepage: https://cloudassess.org
- Size: 2.37 MB
- Stars: 23
- Watchers: 4
- Forks: 2
- Open Issues: 11
- Releases: 8
-
Metadata Files:
- Readme: README.md
- License: LICENSE.Apache-2.0.txt
README.md
Cloud Assess
This is the official repository of Cloud Assess.
What is Cloud Assess?
Cloud Assess is an open-source tool to automate the assessment of
the environmental impacts of cloud services.
Table of Contents
Getting Started
First, you need to clone this repository:
git checkout git@github.com:kleis-technology/cloud-assess.git
cd cloud-assess
All the commands in the sections below are to be run from the root of this repository.
We assume that you will run these commands in bash.
If you are using another shell, please adapt the commands accordingly.
Docker-compose
You can run the server using docker-compose.
docker compose up -d
The API specification is available in the folder openapi.
For a more interactive visualisation of the API, the docker-compose
also spins up a swagger ui instance.
Visit this http://localhost to explore the endpoints, DTOs and run example queries.
Local build and run
Requirements
To build the server, you will need
- Java 17 (temurin) environment
- A GitHub personal access token (classic) with the permission
read:packagesto download packages from GitHub Package Registry.
Then, set up the following environment variables.
export GITHUB_ACTOR=<your GitHub username>
export GITHUB_TOKEN=<the token you just created>
Procedure
From the root of the git repository, run
./gradlew build
To run the server locally
./gradlew bootRun
The server should start listening for requests on localhost:8080.
Note that, if you are on Windows, use the command ./gradlew.bat instead of ./gradlew.
First Assessment
Each functional unit is associated with a specific API endpoint.
For instance, say we want to assess the environmental impact of using a virtual machine.
The request takes the following form:
{
"period": {
"amount": 1.0,
"unit": "hour"
},
"total_vcpu": {
"amount": 100.0,
"unit": "vCPU"
},
"total_ram": {
"amount": 100.0,
"unit": "GB"
},
"total_storage": {
"amount": 100.0,
"unit": "TB"
},
"virtual_machines": [
{
"id": "vm-01",
"pool_id": "client_vm",
"quantity": {
"amount": 1.0,
"unit": "u"
},
"ram": {
"amount": 4.0,
"unit": "GB"
},
"storage": {
"amount": 20.0,
"unit": "GB"
},
"vcpu": {
"amount": 1.0,
"unit": "vCPU"
},
"meta": {
"region": "sofia",
"env": "production"
}
}
]
}
In this request, we specify the usage of our virtual machine in terms
of the quantity of resources used (ram, storage and vCPU).
Running this request yields an impact assessment with the common LCA indicators.
Of course, in this example, we ran the assessment for a single virtual machine,
but nothing stops you from assessing as many virtual machines as you want.
{
"virtual_machines": [
{
"period": {
"amount": 1.0,
"unit": "hour"
},
"request": {
"id": "vm-01",
"pool_id": "client_vm",
"quantity": {
"amount": 1.0,
"unit": "u"
},
"ram": {
"amount": 4.0,
"unit": "GB"
},
"storage": {
"amount": 20.0,
"unit": "GB"
},
"vcpu": {
"amount": 1.0,
"unit": "vCPU"
},
"meta": {
"region": "sofia",
"env": "production"
}
},
"impacts": {
"ADPe": {
"total": {
"amount": 1.1854678736318172E-5,
"unit": "kg Sb-Eq"
},
"per_lc_step": {
"manufacturing": {
"amount": 2.225849560067201E-6,
"unit": "kg Sb-Eq"
},
"transport": {
"amount": 1.526861504175665E-6,
"unit": "kg Sb-Eq"
},
"use": {
"amount": 6.570462152963352E-6,
"unit": "kg Sb-Eq"
},
"end_of_life": {
"amount": 1.5315055191119535E-6,
"unit": "kg Sb-Eq"
}
}
},
"ADPf": {
"total": {
"amount": 62.33162368565782,
"unit": "MJ, net calorific value"
},
"per_lc_step": {
"manufacturing": {
"amount": 16.68493611195954,
"unit": "MJ, net calorific value"
},
"transport": {
"amount": 16.575951835849164,
"unit": "MJ, net calorific value"
},
"use": {
"amount": 12.48864307614414,
"unit": "MJ, net calorific value"
},
"end_of_life": {
"amount": 16.582092661704973,
"unit": "MJ, net calorific value"
}
}
},
"AP": {
"total": {
"amount": 0.027696043162935963,
"unit": "mol H+-Eq"
},
"per_lc_step": {
"manufacturing": {
"amount": 0.007594263925867406,
"unit": "mol H+-Eq"
},
"transport": {
"amount": 0.007499887185410032,
"unit": "mol H+-Eq"
},
"use": {
"amount": 0.005096811622739166,
"unit": "mol H+-Eq"
},
"end_of_life": {
"amount": 0.007505080428919357,
"unit": "mol H+-Eq"
}
}
},
"GWP": {
"total": {
"amount": 4.917652556684529,
"unit": "kg CO2-Eq"
},
"per_lc_step": {
"manufacturing": {
"amount": 1.2685097680580173,
"unit": "kg CO2-Eq"
},
"transport": {
"amount": 1.2582340374175287,
"unit": "kg CO2-Eq"
},
"use": {
"amount": 1.1324125903631403,
"unit": "kg CO2-Eq"
},
"end_of_life": {
"amount": 1.2584961608458427,
"unit": "kg CO2-Eq"
}
}
},
"LU": {
"total": {
"amount": 2.624571812069938,
"unit": "u"
},
"per_lc_step": {
"manufacturing": {
"amount": 0.04726920471902647,
"unit": "u"
},
"transport": {
"amount": 0.021918300384408593,
"unit": "u"
},
"use": {
"amount": 2.5317431295884796,
"unit": "u"
},
"end_of_life": {
"amount": 0.02364117737802341,
"unit": "u"
}
}
},
"ODP": {
"total": {
"amount": 0.013312891435337558,
"unit": "kg CFC-11-Eq"
},
"per_lc_step": {
"manufacturing": {
"amount": 0.0044376267209147125,
"unit": "kg CFC-11-Eq"
},
"transport": {
"amount": 0.0044376261366686634,
"unit": "kg CFC-11-Eq"
},
"use": {
"amount": 1.2410867486489788E-8,
"unit": "kg CFC-11-Eq"
},
"end_of_life": {
"amount": 0.004437626166886695,
"unit": "kg CFC-11-Eq"
}
}
},
"PM": {
"total": {
"amount": 1.443563140628956E-6,
"unit": "disease incidence"
},
"per_lc_step": {
"manufacturing": {
"amount": 4.659322817923548E-7,
"unit": "disease incidence"
},
"transport": {
"amount": 4.6532709663581914E-7,
"unit": "disease incidence"
},
"use": {
"amount": 4.6936584062332816E-8,
"unit": "disease incidence"
},
"end_of_life": {
"amount": 4.653671781384491E-7,
"unit": "disease incidence"
}
}
},
"POCP": {
"total": {
"amount": 0.002505739886538823,
"unit": "kg NMVOC-Eq"
},
"per_lc_step": {
"manufacturing": {
"amount": 4.015940673344095E-5,
"unit": "kg NMVOC-Eq"
},
"transport": {
"amount": 1.6654121903901202E-6,
"unit": "kg NMVOC-Eq"
},
"use": {
"amount": 0.0024609082726224306,
"unit": "kg NMVOC-Eq"
},
"end_of_life": {
"amount": 3.0067949925616415E-6,
"unit": "kg NMVOC-Eq"
}
}
},
"WU": {
"total": {
"amount": 0.2503283010915833,
"unit": "m3 world eq. deprived"
},
"per_lc_step": {
"manufacturing": {
"amount": 0.012371380794322486,
"unit": "m3 world eq. deprived"
},
"transport": {
"amount": 0.0028470792627199957,
"unit": "m3 world eq. deprived"
},
"use": {
"amount": 0.23226350876206023,
"unit": "m3 world eq. deprived"
},
"end_of_life": {
"amount": 0.002846332272480629,
"unit": "m3 world eq. deprived"
}
}
},
"CTUe": {
"total": {
"amount": 58.90191574298565,
"unit": "CTUe"
},
"per_lc_step": {
"manufacturing": {
"amount": 18.73533240114092,
"unit": "CTUe"
},
"transport": {
"amount": 18.51641380532083,
"unit": "CTUe"
},
"use": {
"amount": 3.064604371185056,
"unit": "CTUe"
},
"end_of_life": {
"amount": 18.58556516533884,
"unit": "CTUe"
}
}
},
"CTUh_c": {
"total": {
"amount": 1.9213914310898006E-9,
"unit": "CTUh"
},
"per_lc_step": {
"manufacturing": {
"amount": 1.8094839178619905E-10,
"unit": "CTUh"
},
"transport": {
"amount": 1.3431110837644963E-10,
"unit": "CTUh"
},
"use": {
"amount": 1.4671232876712334E-9,
"unit": "CTUh"
},
"end_of_life": {
"amount": 1.3900864325591864E-10,
"unit": "CTUh"
}
}
},
"CTUh_nc": {
"total": {
"amount": 3.503286449092768E-8,
"unit": "CTUh"
},
"per_lc_step": {
"manufacturing": {
"amount": 8.23316171853553E-9,
"unit": "CTUh"
},
"transport": {
"amount": 7.746208995686664E-9,
"unit": "CTUh"
},
"use": {
"amount": 1.1281201653961916E-8,
"unit": "CTUh"
},
"end_of_life": {
"amount": 7.772292122743571E-9,
"unit": "CTUh"
}
}
},
"Epf": {
"total": {
"amount": 3.763748948066863E-4,
"unit": "kg P-Eq"
},
"per_lc_step": {
"manufacturing": {
"amount": 6.67944179626921E-6,
"unit": "kg P-Eq"
},
"transport": {
"amount": 3.4798870544897944E-6,
"unit": "kg P-Eq"
},
"use": {
"amount": 3.624785519394673E-4,
"unit": "kg P-Eq"
},
"end_of_life": {
"amount": 3.737014016459945E-6,
"unit": "kg P-Eq"
}
}
},
"Epm": {
"total": {
"amount": 0.004107094825533502,
"unit": "kg N-Eq"
},
"per_lc_step": {
"manufacturing": {
"amount": 9.038519487735136E-4,
"unit": "kg N-Eq"
},
"transport": {
"amount": 8.924280436794234E-4,
"unit": "kg N-Eq"
},
"use": {
"amount": 0.0014164017889792132,
"unit": "kg N-Eq"
},
"end_of_life": {
"amount": 8.944130441013518E-4,
"unit": "kg N-Eq"
}
}
},
"Ept": {
"total": {
"amount": 0.04057960045019888,
"unit": "mol N-Eq"
},
"per_lc_step": {
"manufacturing": {
"amount": 0.00950936272870918,
"unit": "mol N-Eq"
},
"transport": {
"amount": 0.009385327891433154,
"unit": "mol N-Eq"
},
"use": {
"amount": 0.01229587775308712,
"unit": "mol N-Eq"
},
"end_of_life": {
"amount": 0.009389032076969424,
"unit": "mol N-Eq"
}
}
},
"IR": {
"total": {
"amount": 0.19346701518814927,
"unit": "kBq U235-Eq"
},
"per_lc_step": {
"manufacturing": {
"amount": 0.018582459009159547,
"unit": "kBq U235-Eq"
},
"transport": {
"amount": 4.811815316290109E-7,
"unit": "kBq U235-Eq"
},
"use": {
"amount": 0.17482771230063854,
"unit": "kBq U235-Eq"
},
"end_of_life": {
"amount": 5.6362696819523E-5,
"unit": "kBq U235-Eq"
}
}
}
}
}
]
}
How does it work?
Trusted Library
The ambition of Cloud Assess is to offer a library of transparent,
PCR-compliant and executable LCA models in the sector of digital services.
More precisely, this work builds on the
new PCR (to be published soon) for data center and cloud services.
The PCR defines 7 functional units, covering the hosting infrastructure (physical datacenter) up to
more abstract ones, e.g., virtual machines.
Cloud Assess aims at covering all functional units, but also FU that are not explicitly covered by the PCR
| PCR No. | Functional Unit | Model | API endpoint |
|---|---|---|---|
| 1 | Datacenter | n/a | n/a |
| 2 | Physical server | ✅ | planned |
| 3 | Storage | ✅ | planned |
| 4 | Network equipment | ✅ | planned |
| 5 | Computing resource | ✅ | ✅ |
| 6 | Virtual machine | ✅ | ✅ |
| 7 | Block storage | ✅ | ✅ |
These models are specified under the folder trusted_library.
Adapt the models to your taste
Structure
The models are written in the LCA as CODE language.
This is a domain-specific language designed for the need of lifecycle analysis.
The models under the folder trusted_library/lib are directly loaded in the server
to perform the assessments.
A tutorial is available if you want to learn
more about the language itself.
The source repository is available here.
The folder trusted_library is organized as follows.
lib: this folder contains the models written in LCA as CODE.inventory: this folder contains inventory data (csv files)
Here is an illustration of this layering structure.
Configuring and deploying Cloud Assess
Check out the wiki
for a tutorial on how to configure and deploy Cloud Assess in a Kubernetes environment.
License
The contents of this repository are licensed as follows:
trusted_libraryfolder: Licensed under the Apache 2 license- All other content: Dual-licensed under the GNU AGPL v3 or a commercial license (see LICENSE)
For commercial licensing inquiries, please contact us at contact@kleis.ch.
About us
Cloud Assess is a joint-venture of Resilio
and Kleis Technology.
If you have any questions related to Cloud Assess, be it about the LCA methodology or ways to automate the assessments,
feel free to reach out to us at contact@resilio.tech.
Owner metadata
- Name: Kleis Technology
- Login: kleis-technology
- Email:
- Kind: organization
- Description:
- Website: https://kleis.ch
- Location:
- Twitter:
- Company:
- Icon url: https://avatars.githubusercontent.com/u/69863653?v=4
- Repositories: 1
- Last ynced at: 2023-04-28T21:39:57.460Z
- Profile URL: https://github.com/kleis-technology
GitHub Events
Total
- Release event: 7
- Delete event: 20
- Pull request event: 16
- Fork event: 1
- Issues event: 3
- Watch event: 6
- Issue comment event: 4
- Push event: 108
- Gollum event: 1
- Pull request review comment event: 7
- Pull request review event: 7
- Create event: 21
Last Year
- Release event: 2
- Delete event: 6
- Pull request event: 8
- Issues event: 2
- Watch event: 4
- Issue comment event: 1
- Push event: 64
- Gollum event: 1
- Pull request review comment event: 4
- Pull request review event: 4
- Create event: 6
Committers metadata
Last synced: 2 days ago
Total Commits: 199
Total Committers: 3
Avg Commits per committer: 66.333
Development Distribution Score (DDS): 0.05
Commits in past year: 46
Committers in past year: 2
Avg Commits per committer in past year: 23.0
Development Distribution Score (DDS) in past year: 0.174
| Name | Commits | |
|---|---|---|
| Peva Blanchard | p****d@k****h | 189 |
| Sébastien Bros de Puechredon | s****s@k****h | 8 |
| Arnaud Béguin | a****n@k****h | 2 |
Committer domains:
- kleis.ch: 3
Issue and Pull Request metadata
Last synced: 2 days ago
Total issues: 6
Total pull requests: 28
Average time to close issues: N/A
Average time to close pull requests: about 18 hours
Total issue authors: 3
Total pull request authors: 2
Average comments per issue: 0.0
Average comments per pull request: 0.07
Merged pull request: 24
Bot issues: 0
Bot pull requests: 0
Past year issues: 5
Past year pull requests: 11
Past year average time to close issues: N/A
Past year average time to close pull requests: 2 days
Past year issue authors: 2
Past year pull request authors: 2
Past year average comments per issue: 0.0
Past year average comments per pull request: 0.18
Past year merged pull request: 7
Past year bot issues: 0
Past year bot pull requests: 0
Top Issue Authors
- abeguin (4)
- Thommil (1)
- Shillaker (1)
Top Pull Request Authors
- pevab (23)
- sebdebros (5)
Top Issue Labels
Top Pull Request Labels
Dependencies
- actions/checkout v3 composite
- actions/create-release v1 composite
- actions/setup-java v3 composite
- docker/build-push-action v6 composite
- docker/login-action v3 composite
- docker/setup-buildx-action v3 composite
- docker/setup-qemu-action v3 composite
- gradle/wrapper-validation-action v1.0.6 composite
- actions/checkout v3.5.1 composite
- actions/setup-java v3 composite
- gradle/wrapper-validation-action v1.0.6 composite
- eclipse-temurin 17 build
- gradle 8.2 build
- ch.kleis.lcaac:core $lcaacVersion implementation
- ch.kleis.lcaac:grammar $lcaacVersion implementation
- com.charleskorn.kaml:kaml 0.59.0 implementation
- org.apache.commons:commons-compress 1.28.0 implementation
- org.jetbrains.kotlin:kotlin-reflect * implementation
- org.jetbrains.kotlinx:kotlinx-serialization-json 1.5.1 implementation
- org.springframework.boot:spring-boot-starter * implementation
- org.springframework.boot:spring-boot-starter-actuator * implementation
- org.springframework.boot:spring-boot-starter-json * implementation
- org.springframework.boot:spring-boot-starter-validation * implementation
- org.springframework.boot:spring-boot-starter-web * implementation
- io.mockk:mockk 1.13.4 testImplementation
- org.springframework.boot:spring-boot-starter-test * testImplementation
- org.springframework.boot:spring-boot-starter-validation * testImplementation
- flake-utils *
- lcaac-flake v2.0.0
- nixpkgs nixos-25.05
- numpy >=2.3.4
- pandas >=2.3.3
- seaborn >=0.13.2
- certifi 2025.8.3
- charset-normalizer 3.4.2
- contourpy 1.3.3
- cycler 0.12.1
- fonttools 4.59.0
- idna 3.10
- kiwisolver 1.4.8
- matplotlib 3.10.5
- numpy 2.3.2
- packaging 25.0
- perfanalysis 0.1.0
- pillow 11.3.0
- pyparsing 3.2.3
- python-dateutil 2.9.0.post0
- requests 2.32.4
- six 1.17.0
- urllib3 2.5.0
- matplotlib >=3.10.5
- numpy >=2.3.2
- requests >=2.32.4
- flake-utils 11707dc
- lcaac-flake 5f38f86
- nixpkgs 3de8f8d
- 113 dependencies
Score: 4.624972813284272