{"id":17521833,"url":"https://github.com/loehnertz/steinmetz","last_synced_at":"2025-04-23T16:43:53.805Z","repository":{"id":37263799,"uuid":"169746206","full_name":"loehnertz/Steinmetz","owner":"loehnertz","description":"A visual approach to the assisted decomposition of monolithic software architectures into microservices","archived":false,"fork":false,"pushed_at":"2023-01-03T17:15:20.000Z","size":78521,"stargazers_count":7,"open_issues_count":30,"forks_count":0,"subscribers_count":3,"default_branch":"develop","last_synced_at":"2023-03-04T15:52:50.838Z","etag":null,"topics":["decomposition","kotlin","microservices","neo4j","visjs","vuejs"],"latest_commit_sha":null,"homepage":null,"language":"Kotlin","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/loehnertz.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}},"created_at":"2019-02-08T14:23:19.000Z","updated_at":"2022-01-19T16:06:02.000Z","dependencies_parsed_at":"2023-02-01T08:15:39.684Z","dependency_job_id":null,"html_url":"https://github.com/loehnertz/Steinmetz","commit_stats":null,"previous_names":[],"tags_count":null,"template":null,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/loehnertz%2FSteinmetz","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/loehnertz%2FSteinmetz/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/loehnertz%2FSteinmetz/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/loehnertz%2FSteinmetz/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/loehnertz","download_url":"https://codeload.github.com/loehnertz/Steinmetz/tar.gz/refs/heads/develop","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":250472238,"owners_count":21436105,"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":["decomposition","kotlin","microservices","neo4j","visjs","vuejs"],"created_at":"2024-10-20T12:07:09.219Z","updated_at":"2025-04-23T16:43:53.783Z","avatar_url":"https://github.com/loehnertz.png","language":"Kotlin","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Steinmetz\nA visual approach to the assisted decomposition of monolithic software architectures into microservices\n\n\n## Features\n\n- Generate microservice recommendations for any monolithic (Java) back-end application\n- Only provide, the source code, a VCS log, and optionally a profiler recording\n- Create microservice candidates using seven state-of-the-art graph clustering algorithms\n- Let a custom genetic algorithm optimize the optional input parameters regarding the clustering for you\n- Receive an advanced visualization of the microservice candidate recommendations in three different formats\n\n\u003cbr\u003e\u003cbr\u003e\n![screenshot-1](https://i.imgur.com/9lYAGPm.png)\n\n\n## Idea\n\nThis application was created as part of my [master's thesis](https://github.com/loehnertz/master-thesis).\nIt implements the theoretic methodology that I devised in the thesis. The methodology and implementation are \nlanguage-agnostic in its core although for now, the implementation only supports applications written in Java.\nNevertheless, it is possible to extend _Steinmetz_ to work with other languages.\nFurther down this README, you can find a [basic guide](#Contribute).\n\n\n## Running\n\nThe tool consists of a back-end written in Kotlin as well as front-end built with Vue.js.\nThe entirety of the application is bundled into Docker images and can be executed with `docker-compose`.\nAfter having it installed, while in the root project directory, just run `docker-compose up -d`.\nInstead of the entire repository, you can also just create this `docker-compose.yml` anywhere and run `docker-compose up -d`:\n```yaml\nversion: \"3\"\nservices:\n  frontend:\n    image: loehnertz/steinmetz-frontend\n    ports:\n      - 8056:80\n    volumes:\n      - data:/app\n    depends_on:\n      - backend\n  backend:\n    image: loehnertz/steinmetz-backend\n    ports:\n      - 5005:5005\n      - 5656:5656\n    environment:\n      NEO4J_HOST: \"database\"\n      NEO4J_PORT: \"7687\"\n      EXTERNAL_EXECUTABLE_PATH: \"/app/executables/\"\n    depends_on:\n      - database\n  database:\n    image: loehnertz/neo4j-graph-algos\n    ports:\n      - 7474\n      - 7687\n    environment:\n      NEO4J_AUTH: \"none\"\n      NEO4J_dbms_memory_heap_max__size: \"4G\"\n    volumes:\n      - data:/data\n      - data:/logs\nvolumes:\n  data:\n```\n\n\n## Usage\n\n### Preparation\n1) Create a `.zip` file of the root directory of your application's source code (e.g., `src`).\n2) Create a compatible log file via the VCS that you are using following this table:\n   | VCS      | Command                                                                                              |\n   |----------|------------------------------------------------------------------------------------------------------|\n   | Git      | `git log --all --numstat --date=short --pretty=format:'--%h--%ad--%aN' --no-renames \u003e ./vcs-log.txt` |\n\n3) (Optional) Create a profiler recording of your running application. Currently for the Java programming language,\n   a _Java Flight Recorder_ (JFR) recording is supported. The JFR is a sampling-based profiler, meaning that generally\n   the longer you are recording your application during its runtime, the more precise the results are going to be.\n   To do that, run your application with at least JRE 11 or higher, adding the following arguments (note the file name at the end):\n   `-XX:+UnlockDiagnosticVMOptions -XX:+DebugNonSafepoints -XX:+FlightRecorder -XX:StartFlightRecording=settings=profile,maxsize=10000MB,filename=steinmetz.jfr`\n\n### Analysis\n1) Visit [http://localhost:8056](http://localhost:8056) in your browser.\n2) Select a name for your project, this can be anything.\n3) Specify the base package identifier, meaning the root of your application structure (e.g., `com.example.myapplication`).\n4) Specify the programming language that your application is written in.\n5) Specify the VCS (version control system) you are using during development.\n6) Select the files creating during the _Preparation_ step:\n   - _Static Analysis_: The `.zip` of the source code.\n   - _Dynamic Analysis_ (Optional): The `.jfr` profiler recording.\n   - _Semantic Analysis_: The `.zip` of the source code.\n   - _Evolutionary Analysis_: The `.txt` VCS log.\n7) Click the `Upload` button to upload your data and begin the analyis.\n   Note that the provided data is just uploaded to the locally running back-end instance.\n   We do not store any of your data. If you don't believe us, that's why the code is open-source.\n\n### Exploration\n_Follows soon_\n\n\n## Contribute\n\n_Follows soon_\n\n\n## License\n\nThis project is licensed under the [Apache 2.0 license](LICENSE).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Floehnertz%2Fsteinmetz","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Floehnertz%2Fsteinmetz","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Floehnertz%2Fsteinmetz/lists"}