{"id":21814500,"url":"https://github.com/OpenFero/openfero","last_synced_at":"2025-07-20T09:31:23.002Z","repository":{"id":37481480,"uuid":"429228422","full_name":"Payback159/openfero","owner":"Payback159","description":"OpenFero is intended as an event-triggered job scheduler framework for code agnostic recovery jobs.","archived":false,"fork":false,"pushed_at":"2024-10-16T14:24:35.000Z","size":1043,"stargazers_count":4,"open_issues_count":7,"forks_count":1,"subscribers_count":3,"default_branch":"main","last_synced_at":"2024-10-18T09:51:42.772Z","etag":null,"topics":["kubernetes","prometheus","remediation","self-healing"],"latest_commit_sha":null,"homepage":"https://jelinek.website/openfero/","language":"Go","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/Payback159.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"github":"payback159"}},"created_at":"2021-11-17T23:09:02.000Z","updated_at":"2024-10-16T14:24:40.000Z","dependencies_parsed_at":"2023-09-26T00:03:21.183Z","dependency_job_id":"a540807c-ff0b-4c3f-a5fe-20d265ad8396","html_url":"https://github.com/Payback159/openfero","commit_stats":{"total_commits":491,"total_committers":4,"mean_commits":122.75,"dds":"0.42158859470468435","last_synced_commit":"fc35193a33aefb0cfb6d20ed4e63b48489eb6df5"},"previous_names":[],"tags_count":20,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Payback159%2Fopenfero","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Payback159%2Fopenfero/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Payback159%2Fopenfero/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Payback159%2Fopenfero/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Payback159","download_url":"https://codeload.github.com/Payback159/openfero/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":226766515,"owners_count":17678718,"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":["kubernetes","prometheus","remediation","self-healing"],"created_at":"2024-11-27T14:38:52.818Z","updated_at":"2025-07-20T09:31:22.992Z","avatar_url":"https://github.com/Payback159.png","language":"Go","funding_links":["https://github.com/sponsors/payback159"],"categories":[],"sub_categories":[],"readme":"# OpenFero\n\nOpen Fero is a little play on words from the Latin \"opem fero\", which means \"to help\" and the term \"OpenSource\". Hence the name \"openfero\". The scope of OpenFero is a framework for self-healing in a cloud-native environment.\n\n[![OpenSSF Scorecard](https://api.scorecard.dev/projects/github.com/OpenFero/openfero/badge)](https://scorecard.dev/viewer/?uri=github.com/OpenFero/openfero) [![OpenSSF Best Practices](https://www.bestpractices.dev/projects/6683/badge)](https://www.bestpractices.dev/projects/6683)\n\n## Getting started\n\nThe recommended method is installation via helm chart.\n\n```bash\nhelm pull oci://ghcr.io/openfero/openfero/charts/openfero --version 0.2.1\nhelm install openfero oci://ghcr.io/openfero/openfero/charts/openfero --version 0.2.1\n```\n\n### Testing the Installation\n\nYou can test if OpenFero is working properly in multiple ways:\n\n#### Using the Swagger UI\n\nAccess the Swagger UI at `http://openfero-service:8080/swagger/` to interact with the API directly through a web interface. The Swagger UI provides a complete documentation of all available endpoints and allows you to test them directly.\n\n#### Using the OpenFero UI\n\nThe OpenFero UI is available at `http://openfero-service:8080/` and provides:\n\n- Overview of all received alerts and their current status\n- Configuration viewer for operarios definitions\n\n#### Using curl\n\n```bash\ncurl -X POST http://openfero-service:8080/alert \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n    \"status\": \"firing\",\n    \"alerts\": [{\n      \"status\": \"firing\",\n      \"labels\": {\n        \"alertname\": \"TestAlert\",\n        \"severity\": \"warning\"\n      }\n    }]\n  }'\n```\n\n## Component-Diagram\n\n![Shows the Prometheus, Alertmanager components and that Alertmanager notifies the OpenFero component so that OpenFero starts the jobs via Kubernetes API.][comp-dia]\n\n## Operarios definitions\n\nThe operarios definitions are stored in the namespace in ConfigMaps with the naming convention `openfero-\u003calertname\u003e-\u003cstatus\u003e`.\n\n### Example-Names\n\n- `openfero-KubeQuotaAlmostReached-firing`\n- `openfero-KubeQuotaAlmostReached-resolved`\n\n### Operarios-Example\n\n```yaml\napiVersion: batch/v1\nkind: Job\nmetadata:\n  name: openfero-kubequotaalmostfull-firing\n  labels:\n    app: openfero\nspec:\n  parallelism: 1\n  completions: 1\n  template:\n    labels:\n      app: openfero\n    spec:\n      containers:\n        - name: python-job\n          image: python:latest\n          args:\n            - bash\n            - -c\n            - |-\n              echo \"Hallo Welt\"\n      imagePullPolicy: Always\n      restartPolicy: Never\n      serviceAccount: \u003cdesired-sa\u003e\n      serviceAccountName: \u003cdesired-sa\u003e\n```\n\n## Security note\n\nThe service account that is installed when deploying openfero is for openfero itself. For the operarios, separate service accounts must be rolled out, which have the appropriate permissions for the remediation.\n\nFor operarios that need to interact with the Kubernetes API, it is recommended to define a suitable role for and authorize it via ServiceAccount in the job definition.\n\n[comp-dia]: ./docs/component-diagram.png\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FOpenFero%2Fopenfero","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FOpenFero%2Fopenfero","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FOpenFero%2Fopenfero/lists"}