{"id":19968500,"url":"https://github.com/pecigonzalo/fodinfo","last_synced_at":"2025-05-04T01:30:25.178Z","repository":{"id":51233328,"uuid":"357605056","full_name":"pecigonzalo/fodinfo","owner":"pecigonzalo","description":"F# microservice template for Kubernetes","archived":false,"fork":false,"pushed_at":"2021-05-19T16:10:51.000Z","size":90,"stargazers_count":14,"open_issues_count":1,"forks_count":1,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-04-08T00:05:41.046Z","etag":null,"topics":["dotnet","dotnet-core","fsharp","helm","kubernetes","kustomize","microservice"],"latest_commit_sha":null,"homepage":"","language":"F#","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/pecigonzalo.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":"2021-04-13T15:38:49.000Z","updated_at":"2022-12-21T20:38:20.000Z","dependencies_parsed_at":"2022-09-05T10:50:38.842Z","dependency_job_id":null,"html_url":"https://github.com/pecigonzalo/fodinfo","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pecigonzalo%2Ffodinfo","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pecigonzalo%2Ffodinfo/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pecigonzalo%2Ffodinfo/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pecigonzalo%2Ffodinfo/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pecigonzalo","download_url":"https://codeload.github.com/pecigonzalo/fodinfo/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":252276955,"owners_count":21722447,"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":["dotnet","dotnet-core","fsharp","helm","kubernetes","kustomize","microservice"],"created_at":"2024-11-13T02:46:00.092Z","updated_at":"2025-05-04T01:30:24.733Z","avatar_url":"https://github.com/pecigonzalo.png","language":"F#","funding_links":[],"categories":[],"sub_categories":[],"readme":"# fodinfo\n\nfodinfo is a tiny web application made with ~~Go~~ F# that showcases best practices of running microservices in Kubernetes. fodinfo is a F# port of the great work of [@stefanprodan](https://github.com/stefanprodan) in https://github.com/stefanprodan/podinfo to F#.\n\n## Why?\n\nIm using this as a project to learn F# and potentially create a usefull template for F# project.\n\n## Stack\n\n- [Falco](https://github.com/pimbrouwers/Falco)\n\n## Specifications:\n\n- [x] Health checks (readiness and liveness)\n- [ ] Instrumented with Prometheus **(In Progress)**\n- [ ] 12-factor app **(In Progress)**\n- [ ] File watcher for secrets and configmaps\n- [ ] Tracing with Istio and Jaeger\n- [ ] Linkerd service profile\n- [x] Structured logging\n- [ ] Fault injection (random errors and latency)\n- [ ] Swagger docs\n- [ ] Helm and Kustomize installers\n- [ ] End-to-End testing with Kubernetes Kind and Helm\n- [ ] Kustomize testing with GitHub Actions and Open Policy Agent\n- [ ] Multi-arch container image with Docker buildx and Github Actions\n- [ ] CVE scanning with trivy\n- [ ] Graceful shutdown on interrupt signals\n\n## Web API:\n\n- [ ] `GET /` prints runtime information\n- [x] `GET /version` prints fodinfo version and git commit hash\n- [x] `GET /metrics` return HTTP requests duration and Go runtime metrics\n- [x] `GET /healthz` used by Kubernetes liveness probe\n- [x] `GET /readyz` used by Kubernetes readiness probe\n- [x] `POST /readyz/enable` signals the Kubernetes LB that this instance is ready to receive traffic\n- [x] `POST /readyz/disable` signals the Kubernetes LB to stop sending requests to this instance\n- [x] `GET /status/{code}` returns the status code\n- [x] `GET /panic` crashes the process with exit code 255\n- [x] `POST /echo` forwards the call to the backend service and echos the posted content\n- [x] `GET /env` returns the environment variables as a JSON array\n- [x] `GET /headers` returns a JSON with the request HTTP headers\n- [x] `GET /delay/{seconds}` waits for the specified period\n- [ ] `POST /token` issues a JWT token valid for one minute `JWT=$(curl -sd 'anon' fodinfo:5000/token | jq -r .token)`\n- [ ] `GET /token/validate` validates the JWT token `curl -H \"Authorization: Bearer $JWT\" fodinfo:5000/token/validate`\n- [ ] `GET /configs` returns a JSON with configmaps and/or secrets mounted in the `config` volume\n- [ ] `POST/PUT /cache/{key}` saves the posted content to Redis\n- [ ] `GET /cache/{key}` returns the content from Redis if the key exists\n- [ ] `DELETE /cache/{key}` deletes the key from Redis if exists\n- [x] `POST /store` writes the posted content to disk at /data/hash and returns the SHA1 hash of the content\n- [x] `GET /store/{hash}` returns the content of the file /data/hash if exists\n- [ ] `GET /ws/echo` echos content via websockets `podcli ws ws://localhost:5000/ws/echo`\n- [ ] `GET /chunked/{seconds}` uses `transfer-encoding` type `chunked` to give a partial response and then waits for the specified period\n- [ ] `GET /swagger.json` returns the API Swagger docs, used for Linkerd service profiling and Gloo routes discovery\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpecigonzalo%2Ffodinfo","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpecigonzalo%2Ffodinfo","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpecigonzalo%2Ffodinfo/lists"}