{"id":114714,"name":"EcoSonar","description":"Enabling development teams to consider the environmental impact of digital technology during development and to promote knowledge of best eco-design and accessibility practices.","url":"https://github.com/green-code-initiative/EcoSonar","last_synced_at":"2026-04-30T02:30:18.128Z","repository":{"id":42076935,"uuid":"469624159","full_name":"green-code-initiative/EcoSonar","owner":"green-code-initiative","description":"EcoSonar, the ecodesign audit tool","archived":false,"fork":false,"pushed_at":"2026-04-09T13:12:33.000Z","size":35107,"stargazers_count":60,"open_issues_count":17,"forks_count":19,"subscribers_count":9,"default_branch":"main","last_synced_at":"2026-04-26T00:25:42.964Z","etag":null,"topics":["accessibility-testing","best-practices","ecodesign","ecoindex","greenit","lighthouse","monitoring","rgaa","rgesn","sonarqube","sonarqube-plugin"],"latest_commit_sha":null,"homepage":"https://ecosonar.org/","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/green-code-initiative.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","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,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2022-03-14T07:28:41.000Z","updated_at":"2026-02-04T11:11:52.000Z","dependencies_parsed_at":"2023-10-12T06:14:34.918Z","dependency_job_id":null,"html_url":"https://github.com/green-code-initiative/EcoSonar","commit_stats":{"total_commits":97,"total_committers":12,"mean_commits":8.083333333333334,"dds":0.4226804123711341,"last_synced_commit":"e7c36b47ebdec20e2b3226af27a315cb3ce2fe0c"},"previous_names":["green-code-initiative/ecosonar","accenture/ecosonar"],"tags_count":6,"template":false,"template_full_name":null,"purl":"pkg:github/green-code-initiative/EcoSonar","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/green-code-initiative%2FEcoSonar","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/green-code-initiative%2FEcoSonar/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/green-code-initiative%2FEcoSonar/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/green-code-initiative%2FEcoSonar/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/green-code-initiative","download_url":"https://codeload.github.com/green-code-initiative/EcoSonar/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/green-code-initiative%2FEcoSonar/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32318417,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-26T23:26:28.701Z","status":"ssl_error","status_checked_at":"2026-04-26T23:26:25.802Z","response_time":129,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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"}},"owner":{"login":"green-code-initiative","name":"Green Code Initiative","uuid":"117859860","kind":"organization","description":"Let's write low-carbon software","email":"contact@green-code-initiative.org","website":"green-code-initiative.org","location":"France","twitter":null,"company":null,"icon_url":"https://avatars.githubusercontent.com/u/117859860?v=4","repositories_count":28,"last_synced_at":"2025-04-28T13:03:32.164Z","metadata":{"has_sponsors_listing":false},"html_url":"https://github.com/green-code-initiative","funding_links":[],"total_stars":365,"followers":167,"following":0,"created_at":"2023-02-28T22:20:25.527Z","updated_at":"2025-04-28T13:03:32.164Z","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/green-code-initiative","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/green-code-initiative/repositories"},"packages":[],"commits":{"id":11615605,"full_name":"green-code-initiative/EcoSonar","default_branch":"master","total_commits":101,"total_committers":13,"total_bot_commits":1,"total_bot_committers":1,"mean_commits":7.769230769230769,"dds":0.3168316831683168,"past_year_total_commits":2,"past_year_total_committers":2,"past_year_total_bot_commits":0,"past_year_total_bot_committers":0,"past_year_mean_commits":1.0,"past_year_dds":0.5,"last_synced_at":"2026-04-27T01:03:10.878Z","last_synced_commit":"65f8f6843d69a56517c1b6db6fd62a2c6a07bfa5","created_at":"2026-02-04T20:01:43.229Z","updated_at":"2026-04-27T01:01:27.316Z","committers":[{"name":"Haupais","email":"alice.haupais@accenture.com","login":"alicehaupais","count":69},{"name":"Ashvin Appigadoo","email":"ashvin.appigadoo@accenture.com","login":null,"count":8},{"name":"ashvinappi","email":"38433435+ashvinappi","login":"ashvinappi","count":7},{"name":"Augustin_dltt","email":"augustindelataille@gmail.com","login":"Adlt92","count":5},{"name":"Loïc Kaczmarek","email":"lkaczmarek@octo.com","login":"loickaczmarek","count":3},{"name":"sboudaya","email":"161494318+sboudaya","login":"sboudaya","count":2},{"name":"dependabot[bot]","email":"49699333+dependabot[bot]","login":"dependabot[bot]","count":1},{"name":"ashvinApp24","email":"ashvinappi@gmail.com","login":"ashvinApp24","count":1},{"name":"Melanie LE ROY","email":"103173975+mlr-acc-dev","login":"mlr-acc-dev","count":1},{"name":"Maikel Dolle","email":"maikel@itmagix.nl","login":"itmagix","count":1},{"name":"augustin.de_la_taille","email":"a.a.de.la.taille@accenture.com","login":null,"count":1},{"name":"David DE CARVALHO","email":"ddecarvalho@solocal.com","login":null,"count":1},{"name":"Boudaya","email":"sami.boudaya@accenture.com","login":null,"count":1}],"past_year_committers":[{"name":"ashvinApp24","email":"ashvinappi@gmail.com","login":"ashvinApp24","count":1},{"name":"Ashvin Appigadoo","email":"ashvin.appigadoo@accenture.com","login":null,"count":1}],"commits_url":"https://commits.ecosyste.ms/api/v1/hosts/GitHub/repositories/green-code-initiative%2FEcoSonar/commits","host":{"name":"GitHub","url":"https://github.com","kind":"github","last_synced_at":"2026-04-29T00:00:10.453Z","repositories_count":6221882,"commits_count":900187272,"contributors_count":34900012,"owners_count":1146960,"icon_url":"https://github.com/github.png","host_url":"https://commits.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://commits.ecosyste.ms/api/v1/hosts/GitHub/repositories"}},"issues_stats":{"full_name":"green-code-initiative/EcoSonar","html_url":"https://github.com/green-code-initiative/EcoSonar","last_synced_at":"2026-04-21T02:01:41.173Z","status":"active","issues_count":0,"pull_requests_count":0,"avg_time_to_close_issue":null,"avg_time_to_close_pull_request":null,"issues_closed_count":0,"pull_requests_closed_count":0,"pull_request_authors_count":0,"issue_authors_count":0,"avg_comments_per_issue":null,"avg_comments_per_pull_request":null,"merged_pull_requests_count":0,"bot_issues_count":0,"bot_pull_requests_count":0,"past_year_issues_count":0,"past_year_pull_requests_count":0,"past_year_avg_time_to_close_issue":null,"past_year_avg_time_to_close_pull_request":null,"past_year_issues_closed_count":0,"past_year_pull_requests_closed_count":0,"past_year_pull_request_authors_count":0,"past_year_issue_authors_count":0,"past_year_avg_comments_per_issue":null,"past_year_avg_comments_per_pull_request":null,"past_year_bot_issues_count":0,"past_year_bot_pull_requests_count":0,"past_year_merged_pull_requests_count":0,"created_at":"2026-04-21T02:01:40.224Z","updated_at":"2026-04-21T02:01:41.174Z","repository_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/green-code-initiative%2FEcoSonar","issues_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/green-code-initiative%2FEcoSonar/issues","issue_labels_count":{},"pull_request_labels_count":{},"issue_author_associations_count":{},"pull_request_author_associations_count":{},"issue_authors":{},"pull_request_authors":{},"host":{"name":"GitHub","url":"https://github.com","kind":"github","last_synced_at":"2026-04-23T00:00:09.119Z","repositories_count":14364284,"issues_count":34455675,"pull_requests_count":112803129,"authors_count":11243070,"icon_url":"https://github.com/github.png","host_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories","owners_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/owners","authors_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors"},"past_year_issue_labels_count":{},"past_year_pull_request_labels_count":{},"past_year_issue_author_associations_count":{},"past_year_pull_request_author_associations_count":{},"past_year_issue_authors":{},"past_year_pull_request_authors":{},"maintainers":[],"active_maintainers":[]},"events":{"total":{"IssueCommentEvent":1,"CreateEvent":1},"last_year":{"IssueCommentEvent":1,"CreateEvent":1}},"keywords":["accessibility-testing","best-practices","ecodesign","ecoindex","greenit","lighthouse","monitoring","rgaa","rgesn","sonarqube","sonarqube-plugin"],"dependencies":[{"ecosystem":"maven","filepath":"EcoSonar-SonarQube/pom.xml","sha":null,"kind":"manifest","created_at":"2022-08-29T21:50:16.853Z","updated_at":"2022-08-29T21:50:16.853Z","repository_link":"https://github.com/green-code-initiative/EcoSonar/blob/main/EcoSonar-SonarQube/pom.xml","dependencies":[{"id":3220621000,"package_name":"org.sonarsource.sonarqube:sonar-plugin-api","ecosystem":"maven","requirements":"8.0","direct":true,"kind":"provided","optional":false},{"id":3220621001,"package_name":"org.sonarsource.analyzer-commons:sonar-analyzer-commons","ecosystem":"maven","requirements":"1.19.0.786","direct":true,"kind":"runtime","optional":false},{"id":3220621002,"package_name":"org.sonarsource.java:sonar-java-plugin","ecosystem":"maven","requirements":"7.4.0.27839","direct":true,"kind":"provided","optional":false},{"id":3220621003,"package_name":"org.apache.commons:commons-lang3","ecosystem":"maven","requirements":"3.12.0","direct":true,"kind":"runtime","optional":false}]},{"ecosystem":"npm","filepath":"EcoSonar-API/package.json","sha":null,"kind":"manifest","created_at":"2022-08-29T21:50:16.904Z","updated_at":"2022-08-29T21:50:16.904Z","repository_link":"https://github.com/green-code-initiative/EcoSonar/blob/main/EcoSonar-API/package.json","dependencies":[{"id":3220624526,"package_name":"@azure/identity","ecosystem":"npm","requirements":"^2.1.0","direct":true,"kind":"runtime","optional":false},{"id":3220624527,"package_name":"@azure/keyvault-secrets","ecosystem":"npm","requirements":"^4.4.0","direct":true,"kind":"runtime","optional":false},{"id":3220624528,"package_name":"concat-files","ecosystem":"npm","requirements":"^0.1.1","direct":true,"kind":"runtime","optional":false},{"id":3220624529,"package_name":"cors","ecosystem":"npm","requirements":"^2.8.5","direct":true,"kind":"runtime","optional":false},{"id":3220624530,"package_name":"dotenv","ecosystem":"npm","requirements":"^16.0.1","direct":true,"kind":"runtime","optional":false},{"id":3220624531,"package_name":"express","ecosystem":"npm","requirements":"^4.18.1","direct":true,"kind":"runtime","optional":false},{"id":3220624532,"package_name":"glob","ecosystem":"npm","requirements":"^8.0.3","direct":true,"kind":"runtime","optional":false},{"id":3220624533,"package_name":"js-yaml","ecosystem":"npm","requirements":"^4.1.0","direct":true,"kind":"runtime","optional":false},{"id":3220624534,"package_name":"lighthouse","ecosystem":"npm","requirements":"^9.6.3","direct":true,"kind":"runtime","optional":false},{"id":3220624535,"package_name":"mongodb","ecosystem":"npm","requirements":"^4.8.0","direct":true,"kind":"runtime","optional":false},{"id":3220624536,"package_name":"mongoose","ecosystem":"npm","requirements":"^6.4.6","direct":true,"kind":"runtime","optional":false},{"id":3220624537,"package_name":"puppeteer","ecosystem":"npm","requirements":"^15.5.0","direct":true,"kind":"runtime","optional":false},{"id":3220624538,"package_name":"puppeteer-har","ecosystem":"npm","requirements":"^1.1.2","direct":true,"kind":"runtime","optional":false},{"id":3220624539,"package_name":"uniqid","ecosystem":"npm","requirements":"^5.4.0","direct":true,"kind":"runtime","optional":false},{"id":3220624540,"package_name":"eslint","ecosystem":"npm","requirements":"^8.20.0","direct":true,"kind":"development","optional":false},{"id":3220624541,"package_name":"eslint-config-standard","ecosystem":"npm","requirements":"^17.0.0","direct":true,"kind":"development","optional":false},{"id":3220624542,"package_name":"eslint-plugin-import","ecosystem":"npm","requirements":"^2.26.0","direct":true,"kind":"development","optional":false},{"id":3220624543,"package_name":"eslint-plugin-node","ecosystem":"npm","requirements":"^11.1.0","direct":true,"kind":"development","optional":false},{"id":3220624544,"package_name":"eslint-plugin-promise","ecosystem":"npm","requirements":"^6.0.0","direct":true,"kind":"development","optional":false},{"id":3220624545,"package_name":"nodemon","ecosystem":"npm","requirements":"^2.0.19","direct":true,"kind":"development","optional":false}]},{"ecosystem":"npm","filepath":"EcoSonar-SonarQube/package.json","sha":null,"kind":"manifest","created_at":"2022-08-29T21:50:17.033Z","updated_at":"2022-08-29T21:50:17.033Z","repository_link":"https://github.com/green-code-initiative/EcoSonar/blob/main/EcoSonar-SonarQube/package.json","dependencies":[{"id":3220627841,"package_name":"apexcharts","ecosystem":"npm","requirements":"^3.30.0","direct":true,"kind":"runtime","optional":false},{"id":3220627842,"package_name":"axios","ecosystem":"npm","requirements":"^0.24.0","direct":true,"kind":"runtime","optional":false},{"id":3220627843,"package_name":"classnames","ecosystem":"npm","requirements":"^2.3.1","direct":true,"kind":"runtime","optional":false},{"id":3220627844,"package_name":"file-loader","ecosystem":"npm","requirements":"^6.2.0","direct":true,"kind":"runtime","optional":false},{"id":3220627845,"package_name":"react-apexcharts","ecosystem":"npm","requirements":"^1.3.9","direct":true,"kind":"runtime","optional":false},{"id":3220627846,"package_name":"@babel/core","ecosystem":"npm","requirements":"^7.17.2","direct":true,"kind":"development","optional":false},{"id":3220627847,"package_name":"@babel/eslint-parser","ecosystem":"npm","requirements":"^7.17.0","direct":true,"kind":"development","optional":false},{"id":3220627848,"package_name":"@babel/plugin-transform-runtime","ecosystem":"npm","requirements":"^7.17.0","direct":true,"kind":"development","optional":false},{"id":3220627849,"package_name":"@babel/preset-env","ecosystem":"npm","requirements":"^7.16.11","direct":true,"kind":"development","optional":false},{"id":3220627850,"package_name":"@babel/preset-react","ecosystem":"npm","requirements":"^7.16.7","direct":true,"kind":"development","optional":false},{"id":3220627851,"package_name":"babel-loader","ecosystem":"npm","requirements":"^8.2.3","direct":true,"kind":"development","optional":false},{"id":3220627852,"package_name":"babel-preset-es2015","ecosystem":"npm","requirements":"^6.24.1","direct":true,"kind":"development","optional":false},{"id":3220627853,"package_name":"babel-preset-react","ecosystem":"npm","requirements":"^6.24.1","direct":true,"kind":"development","optional":false},{"id":3220627854,"package_name":"standard","ecosystem":"npm","requirements":"^16.0.4","direct":true,"kind":"development","optional":false},{"id":3220627855,"package_name":"babel-eslint","ecosystem":"npm","requirements":"^10.1.0","direct":true,"kind":"development","optional":false},{"id":3220627856,"package_name":"css-loader","ecosystem":"npm","requirements":"^6.4.0","direct":true,"kind":"development","optional":false},{"id":3220627857,"package_name":"detect-port","ecosystem":"npm","requirements":"1.3.0","direct":true,"kind":"development","optional":false},{"id":3220627858,"package_name":"dotenv","ecosystem":"npm","requirements":"10.0.0","direct":true,"kind":"development","optional":false},{"id":3220627859,"package_name":"eslint","ecosystem":"npm","requirements":"^7.32.0","direct":true,"kind":"development","optional":false},{"id":3220627860,"package_name":"eslint-config-standard","ecosystem":"npm","requirements":"^16.0.3","direct":true,"kind":"development","optional":false},{"id":3220627861,"package_name":"eslint-plugin-import","ecosystem":"npm","requirements":"^2.25.2","direct":true,"kind":"development","optional":false},{"id":3220627862,"package_name":"eslint-plugin-node","ecosystem":"npm","requirements":"^11.1.0","direct":true,"kind":"development","optional":false},{"id":3220627863,"package_name":"eslint-plugin-promise","ecosystem":"npm","requirements":"^5.1.1","direct":true,"kind":"development","optional":false},{"id":3220627864,"package_name":"eslint-plugin-react","ecosystem":"npm","requirements":"^7.26.1","direct":true,"kind":"development","optional":false},{"id":3220627865,"package_name":"interweave","ecosystem":"npm","requirements":"^12.9.0","direct":true,"kind":"development","optional":false},{"id":3220627866,"package_name":"jest","ecosystem":"npm","requirements":"27.2.5","direct":true,"kind":"development","optional":false},{"id":3220627867,"package_name":"postcss-loader","ecosystem":"npm","requirements":"^6.2.0","direct":true,"kind":"development","optional":false},{"id":3220627868,"package_name":"react","ecosystem":"npm","requirements":"17.0.2","direct":true,"kind":"development","optional":false},{"id":3220627869,"package_name":"react-dev-utils","ecosystem":"npm","requirements":"0.2.1","direct":true,"kind":"development","optional":false},{"id":3220627870,"package_name":"react-dom","ecosystem":"npm","requirements":"17.0.2","direct":true,"kind":"development","optional":false},{"id":3220627871,"package_name":"sass","ecosystem":"npm","requirements":"^1.49.7","direct":true,"kind":"development","optional":false},{"id":3220627872,"package_name":"sass-loader","ecosystem":"npm","requirements":"^10.2.1","direct":true,"kind":"development","optional":false},{"id":3220627873,"package_name":"style-loader","ecosystem":"npm","requirements":"^3.3.0","direct":true,"kind":"development","optional":false},{"id":3220627874,"package_name":"uglifyjs-webpack-plugin","ecosystem":"npm","requirements":"^2.2.0","direct":true,"kind":"development","optional":false},{"id":3220627875,"package_name":"webpack","ecosystem":"npm","requirements":"^5.58.2","direct":true,"kind":"development","optional":false},{"id":3220627876,"package_name":"webpack-dev-server","ecosystem":"npm","requirements":"4.3.1","direct":true,"kind":"development","optional":false}]},{"ecosystem":"docker","filepath":"EcoSonar-API/Dockerfile","sha":null,"kind":"manifest","created_at":"2023-01-28T23:30:27.858Z","updated_at":"2023-01-28T23:30:27.858Z","repository_link":"https://github.com/green-code-initiative/EcoSonar/blob/main/EcoSonar-API/Dockerfile","dependencies":[{"id":7216222994,"package_name":"node","ecosystem":"docker","requirements":"16-slim","direct":true,"kind":"build","optional":false}]},{"ecosystem":"actions","filepath":".github/workflows/publish-docker-image.yml","sha":null,"kind":"manifest","created_at":"2023-10-12T06:14:34.096Z","updated_at":"2023-10-12T06:14:34.096Z","repository_link":"https://github.com/green-code-initiative/EcoSonar/blob/main/.github/workflows/publish-docker-image.yml","dependencies":[{"id":14166816791,"package_name":"actions/checkout","ecosystem":"actions","requirements":"v4","direct":true,"kind":"composite","optional":false},{"id":14166816792,"package_name":"docker/login-action","ecosystem":"actions","requirements":"65b78e6e13532edd9afa3aa52ac7964289d1a9c1","direct":true,"kind":"composite","optional":false},{"id":14166816793,"package_name":"docker/metadata-action","ecosystem":"actions","requirements":"9ec57ed1fcdbf14dcef7dfbe97b2010124a938b7","direct":true,"kind":"composite","optional":false},{"id":14166816794,"package_name":"docker/build-push-action","ecosystem":"actions","requirements":"f2a1d5e99d037542a71f64918e516c093c6f3fc4","direct":true,"kind":"composite","optional":false}]},{"ecosystem":"docker","filepath":"docker-compose.yml","sha":null,"kind":"manifest","created_at":"2023-10-12T06:14:34.435Z","updated_at":"2023-10-12T06:14:34.435Z","repository_link":"https://github.com/green-code-initiative/EcoSonar/blob/main/docker-compose.yml","dependencies":[{"id":14166816965,"package_name":"sonarqube","ecosystem":"docker","requirements":"lts-community","direct":true,"kind":"runtime","optional":false},{"id":14166816966,"package_name":"postgres","ecosystem":"docker","requirements":"alpine","direct":true,"kind":"runtime","optional":false}]}],"score":6.90875477931522,"created_at":"2023-10-12T00:05:35.240Z","updated_at":"2026-04-30T02:30:18.132Z","avatar_url":"https://github.com/green-code-initiative.png","language":"JavaScript","category":"Consumption","sub_category":"Computation and Communication","monthly_downloads":0,"total_dependent_repos":0,"total_dependent_packages":0,"readme":"![Logo](./images/ecosonar-logo.webp)\n\n# EcoSonar, the eco-design audit tool\n\nUser guide: https://github.com/Accenture/EcoSonar/blob/main/USER_GUIDE.md\n\n## Main objectives of EcoSonar:\n\n- Raising the awareness of delivery teams to environmental issues: enabling development teams to consider the environmental impact of digital technology during development and to promote knowledge of best eco-design and accessibility practices.\n- Helping developers to implement best eco-design and accessibility practices with:\n  - Static Code Analysis with SonarQube, and dedicated green coding rules with the addition of Plugin EcoCode (https://www.ecocode.io/)\n  - Dynamic Code Analysis with EcoSonar API using three open-source tools to analyze the application as it is rendered on a web browser (Green-IT Analysis/EcoIndex, Google Lighthouse and W3C Validator).\n- Get an environmental \u0026 performance monitoring solution to allow continuous improvement of delivery teams.\n\n# Summary\n\n- [EcoSonar Architecture ](#archi)\n- [Prerequisites](#prerequisites)\n  - [Infrastructure Requirements](#infra)\n- [EcoSonar Local Installation](#installation)\n- [EcoCode Configuration](#ecocode-config)\n- [Audit Tools](#audit)\n  - [GreenIT-Analysis/EcoIndex](#greenit-cnumr)\n  - [Google Lighthouse](#ligthhouse)\n  - [W3C Validator](#w3c)\n  - [Ecocode](#ecocode)\n- [About](#about)\n\n\u003ca name=\"archi\"\u003e\u003c/a\u003e\n\n## EcoSonar Architecture\n\nThe EcoSonar tool consists of:\n\n- A containerized Node.js API\n\n  - run a GreenIT-Analysis/EcoIndex, Google Lighthouse and W3C Validator analysis for a project containing a list of predefined URLs.\n  - store audits in MongoDB Database\n  - retrieve audits through API calls.\n\n- Sonarqube plugins\n  - Able to configure and retrieve EcoSonar audit reports on dynamic rendering analysis.\n  - Launch an EcoSonar analysis by calling the API when a Sonarqube analysis is triggered.\n  - Add new eco-design coding rules in Sonarqube default configuration with EcoCode plugins.\n\n![Architecture](./images/ecosonar-architecture.webp)\n\nExample of Architecture deployed on Azure:\n\n![Ecosonar Architecture Azure](./images/ecosonar-architecture-azure.webp)\n\n\u003ca name=\"infra\"\u003e\u003c/a\u003e\n\n### Infrastructure Requirements\n\n- Docker Registry: storage of the Ecosonar API Docker image. You can directly use our Github Package which host a Docker image of EcoSonar\n- Docker server with RAM \u003e 4Gb necessary for the analysis by Google Lighthouse\n- MongoDB database\n- Private network: protects the data stored in the database and makes it only accessible to the specified services.\n- Subnet associated with the private network: connection between the database and the API\n- Password Manager: store the password to access the database from the API\n\n\u003ca name=\"installation\"\u003e\u003c/a\u003e\n\n## EcoSonar Local Installation\n\nTo install EcoSonar locally, you have two options:\n\n1. Use Docker Compose\n\nRun the following commands:\n```\ncd EcoSonar-SonarQube\nexport REACT_APP_BASE_URL_ECOSONAR_API=http://localhost:3000\nmvn clean package -Durl=http://localhost:3000\n\ncd ..\ndocker-compose build\ndocker-compose up\n```\n\n2. Launch each component separately.\nFollow instructions in both Readme file:\n- https://github.com/Accenture/EcoSonar/blob/main/EcoSonar-API/README.md\n- https://github.com/Accenture/EcoSonar/blob/main/EcoSonar-SonarQube/README.md\n\n\n\u003ca name=\"ecocode-config\"\u003e\u003c/a\u003e\n\n## Ecocode Configuration\n\nFor specific details on Ecocode, please look at their GitHub repository: https://github.com/green-code-initiative/ecoCode .\nYou will find here `https://github.com/Accenture/EcoSonar/tree/main/EcoSonar-SonarQube/ecocode` the EcoCode Sonarqube plugins that needs to be imported into your Sonarqube instance.\nTo install the ecocode plugins, please follow instruction from EcoSonar SonarQube plugin : https://github.com/Accenture/EcoSonar/blob/main/EcoSonar-SonarQube/README.md\n\nWhen using Sonarqube as code analysis, a default Quality Profile is set up for each language. If you want to use EcoCode rules related to eco-design, you will have to:\n\n- create a new Quality Profile based on the default one : click on the Setting icon for the languge you wish to extend and then Click on `Extend` and create the new Quality Profile\n\n![EcoSonar Quality Profile Creation](./images/java-quality-profile.webp)\n\n- Click on `Activate more` to add new rules to the Quality Profile\n\n![EcoSonar Quality Profile Set up](./images/ecosonar-add-rules.webp)\n\n- In the list of rules, filter using the tag `eco-design` or `ecocode`. You should have now displayed all rules integrated with Ecocode SonarQube plugin. To add them in your profile, click on `Bulk Change` and select `Active in ` your quality profile.\n\n![EcoSonar Quality Profile Activate Rules](./images/ecosonar-activate-rules.webp)\n\n- Go back in the `Quality Profile` page and set up the extended quality Profile as default one. SonarQube will now use this Quality Profile with ecodesign rules to audit your code.\n\n![EcoSonar Default Quality Profile](./images/ecosonar-default-quality-profile.webp)\n\nDo the same setup for each language you wish to use with Ecocode rules.\n\n\u003ca name=\"audit\"\u003e\u003c/a\u003e\n\n## Audit Tools\n\n\u003ca name=\"greenit-cnumr\"\u003e\u003c/a\u003e\n\n### GreenIT-Analysis/EcoIndex\n\nEcoIndex makes it possible to become aware of the environmental impact of the Internet and to propose concrete solutions. You enter a URL into the EcoIndex, which then calculates the performance and environmental footprint of the tested page represented by a score out of 100 and a rating from A to G (the higher the rating, the better!).\nSeveral criteria are taken into account by our calculation method:\n\n- The complexity of the page: the DOM (Document Object Model) represents the structure and the elements of an HTML web page. The more elements the DOM contains, the more complex the page is to decipher, and therefore to display for the browser. Concretely, all this means a greater effort to provide on the part of the processor of your computer to display the page, which reduces the life of your equipment.\n- The weight of data transferred: before appearing on your screen, a web page is a set of data stored on a server. When you access a page, your browser sends a request to the server to communicate this data to it, in order to format it and display it on your screen. Only here: the transport of this data, more or less heavy, from the server to the browser requires energy.\n- The number of HTTP requests: this criterion makes it possible to take into account the effort made by the servers to display the tested page. The greater the number of requests for the same page, the more servers will be needed to serve this page.\n\nOfficial website: https://www.ecoindex.fr/\n\nChrome extension: https://chrome.google.com/webstore/detail/greenit-analysis/mofbfhffeklkbebfclfaiifefjflcpad?hl=fr\n\nGitHub Link: https://github.com/cnumr/GreenIT-Analysis-cli\n\n\u003ca name=\"ligthhouse\"\u003e\u003c/a\u003e\n\n### Google Lighthouse\n\nLighthouse is an open-source, automated tool for improving the quality of web pages. You can run it against any web page, public or requiring authentication. It has audits for performance, accessibility and more. By default, Lighthouse produces a report in JSON or HTML. We will store the JSON report provided in the database to be able to monitor the various performances afterwards. It is also possible to customize this report to obtain only the desired metrics.\n\nOfficial website: https://developer.chrome.com/docs/lighthouse/overview/\n\nChrome extension: https://chrome.google.com/webstore/detail/lighthouse/blipmdconlkpinefehnmjammfjpmpbjk\n\nGitHub Link: https://github.com/GoogleChrome/lighthouse\n\n\u003ca name=\"w3c\"\u003e\u003c/a\u003e\n\n### W3C Validator\n\nThe Markup Validator is a free service by W3C that helps check the validity of Web documents. Validating Web documents is an important step which can dramatically help improving and\nensuring their quality, and it can save a lot of time and money. Validating Web Pages is also an important accessibility best practices to resolve (RGAA, criteria 8.2). If the HTML code is not well formatted, the browser will dynamically correct a certain number of elements to best display the pages causing problems. These dynamic corrections consume resources unnecessarily each time the pages concerned are loaded.\n\nOfficial website: https://validator.w3.org/\n\nGitHub Link: https://github.com/zrrrzzt/html-validator\n\n\u003ca name=\"ecocode\"\u003e\u003c/a\u003e\n\n### EcoCode\n\nEcoCode is a SonarQube plugin developed by a french open-source community called Green Code Initiative. Their goal is to share best practices of development, be aware of environmental responsibility when programming, and together construct rules and metrics for assigning to mobile and web applications an \"environmental label\". They have defined a list of green coding rules to be checked through a Sonarqube analysis to reduce RAM or CPU usage of software application.\n\nOfficial website: https://www.ecocode.io/\n\nGitHub Link: https://github.com/green-code-initiative\n\n\u003ca name=\"about\"\u003e\u003c/a\u003e\n\n## About\n\nTo get more info on EcoSonar, you can contact ecosonar-team@accenture.com.\n\nEcoSonar has been conceived with respect of the licensing rights of the following repository :\n\nGreenIT-Analysis licence : https://github.com/cnumr/GreenIT-Analysis-cli/blob/master/LICENSE\n\nEcoIndex licence : https://creativecommons.org/licenses/by-nc-nd/2.0/fr/\n\nGoogle Lighthouse licence : https://github.com/GoogleChrome/lighthouse/blob/main/LICENSE\n\nW3C Validator licence : https://github.com/zrrrzzt/html-validator/blob/HEAD/LICENSE\n\nEcoCode licence : https://github.com/green-code-initiative/ecoCode/blob/main/LICENCE.md\n\nTo know more on ecodesign best practices, EcoIndex Calculator and how an ecodesign website can be more efficient, please check these two articles from one of our colleagues:\n\nhttps://blog.octo.com/sous-le-capot-de-la-mesure-ecoindex/\n\nhttps://blog.octo.com/une-bonne-pratique-vers-un-numerique-plus-responsable-mesurer-le-ressenti-des-internautes/\n","funding_links":[],"readme_doi_urls":[],"works":{},"citation_counts":{},"total_citations":0,"keywords_from_contributors":["optimize","transforms","archiving","measur","generic","observation","compose","conversion","animals","projection"],"project_url":"https://ost.ecosyste.ms/api/v1/projects/114714","html_url":"https://ost.ecosyste.ms/projects/114714"}