{"id":49371275,"url":"https://github.com/pixel365/pulse","last_synced_at":"2026-04-27T23:31:20.163Z","repository":{"id":343759897,"uuid":"1178759189","full_name":"pixel365/pulse","owner":"pixel365","description":"Pulse is a self-hosted availability monitoring and status orchestration system for teams that want active checks, inbound health signals, and public/internal   status pages from a single config-driven source of truth.","archived":false,"fork":false,"pushed_at":"2026-04-07T07:42:10.000Z","size":114,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-04-07T09:29:34.565Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/pixel365.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":".github/CODEOWNERS","security":".github/SECURITY.md","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":"2026-03-11T10:40:20.000Z","updated_at":"2026-04-07T07:42:15.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/pixel365/pulse","commit_stats":null,"previous_names":["pixel365/pulse"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/pixel365/pulse","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pixel365%2Fpulse","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pixel365%2Fpulse/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pixel365%2Fpulse/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pixel365%2Fpulse/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pixel365","download_url":"https://codeload.github.com/pixel365/pulse/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pixel365%2Fpulse/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32360110,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-27T20:07:02.737Z","status":"ssl_error","status_checked_at":"2026-04-27T20:07:00.910Z","response_time":128,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: 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"}},"keywords":[],"created_at":"2026-04-27T23:31:19.317Z","updated_at":"2026-04-27T23:31:20.157Z","avatar_url":"https://github.com/pixel365.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# pulse\n\n`pulse` is an early-stage active monitoring system for checking the availability of services and infrastructure resources.\n\nThe project is focused on config-driven health checks for things like:\n\n- HTTP APIs\n- TCP endpoints\n- gRPC health checks\n- DNS records\n- TLS certificates\n\nIn the future, the project is planned to grow toward:\n\n- additional check types for databases, queues, and other infrastructure components\n- inbound health/status signals from external systems\n- internal and public status pages generated from collected state\n\n## Current Status\n\nThis project is still in an early stage of development.\n\nWhat exists today:\n\n- configuration loading and validation\n- typed check configuration models\n- periodic check execution with retries and jitter\n- HTTP checks\n- TCP checks\n- DNS checks\n- TLS certificate checks\n- gRPC health checks via `grpc.health.v1.Health/Check`\n- PostgreSQL-backed raw check execution storage\n- persisted current check state\n- persisted check state event history\n- service-level state aggregation on read path\n- migration CLI via `cmd/pulse-migrate`\n- early REST API via `cmd/pulse-api`\n\nWhat does not exist yet in a finished form:\n\n- persisted service-level aggregation\n- complete query/read API for current and historical state\n- public/internal status page generation\n- production-ready logging and observability\n- stable external interfaces\n\n## Running\n\nThe application expects configuration to be provided through `CONFIG_DIR`.\nPostgreSQL is also required for execution and state storage.\n\nExpected layout:\n\n- `services.yaml`\n- `checks/*.yaml`\n\nExample configuration files are available in:\n\n- `examples/services.yaml`\n- `examples/checks/api-checks.yaml`\n\nValidate configuration with:\n\n```bash\nAPI_HTTP_AUTH_TOKEN=dev-token API_HTTP_CUSTOM_HEADER=dev-value CONFIG_DIR=./examples go run ./cmd/pulse-validate\n```\n\nBefore starting the app, apply migrations:\n\n```bash\ngo run ./cmd/pulse-migrate up\n```\n\nRun with:\n\n```bash\nAPI_HTTP_AUTH_TOKEN=dev-token API_HTTP_CUSTOM_HEADER=dev-value CONFIG_DIR=./examples go run ./cmd/pulse\n```\n\nRun API with:\n\n```bash\nAPI_LISTEN_ADDR=:8080 INTERNAL_API_ENABLED=true CONFIG_DIR=./examples go run ./cmd/pulse-api\n```\n\nCheck `spec` values may reference environment variables with `${VAR_NAME}` syntax:\n\n```yaml\nheaders:\n  Authorization: \"Bearer ${API_HTTP_AUTH_TOKEN}\"\n```\n\nReferenced variables must be present when the configuration is loaded. Values are resolved at check execution time and are not written back into the loaded config snapshot.\n\nThe API process has separate internal and public route groups.\nBoth are disabled by default and must be enabled explicitly:\n\n- `INTERNAL_API_ENABLED=true` enables monitoring/admin-oriented endpoints\n- `PUBLIC_API_ENABLED=true` enables public status endpoints\n\nImplemented internal API endpoints:\n\n- `GET /internal/v1/services` returns services with aggregated current status\n- `GET /internal/v1/services/{serviceId}/checks/state`\n- `GET /internal/v1/services/{serviceId}/checks/{checkId}/executions`\n- `GET /internal/v1/services/{serviceId}/checks/{checkId}/timeline`\n- `GET /internal/v1/services/{serviceId}/checks/{checkId}/buckets`\n\nPlaceholder public API endpoints:\n\n- `GET /public/v1/status`\n\n## Notes\n\nA few implementation details are intentionally narrow at this stage:\n\n- gRPC support currently targets only the standard health check API: `grpc.health.v1.Health/Check`\n- raw execution history, current check state, and check state event history are stored in PostgreSQL\n- API configuration is read from the latest valid hot-reloaded config snapshot\n- internal architecture is still evolving\n- timeline and bucket endpoints respect per-check `allowed_buckets`\n\n## Important\n\nEverything may change.\n\nThis includes:\n\n- configuration format\n- internal architecture\n- runtime behavior\n- package layout\n- public interfaces\n\nAt this stage, the repository should be treated as an evolving prototype rather than a stable production-ready system.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpixel365%2Fpulse","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpixel365%2Fpulse","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpixel365%2Fpulse/lists"}