{"id":29798276,"url":"https://github.com/wavezync/pulse-bridge","last_synced_at":"2026-03-16T22:02:36.019Z","repository":{"id":306252443,"uuid":"935347982","full_name":"wavezync/pulse-bridge","owner":"wavezync","description":"🐳 Open-source service and database health monitoring API with built-in uptime tracking and integrations for status pages.","archived":false,"fork":false,"pushed_at":"2025-07-24T12:49:40.000Z","size":97,"stargazers_count":4,"open_issues_count":2,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-07-24T16:55:24.927Z","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/wavezync.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,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-02-19T09:52:03.000Z","updated_at":"2025-07-24T12:07:39.000Z","dependencies_parsed_at":"2025-07-24T16:55:29.425Z","dependency_job_id":"56e523ac-4c62-40bb-8093-ecd2932493b5","html_url":"https://github.com/wavezync/pulse-bridge","commit_stats":null,"previous_names":["wavezync/pulse-bridge"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/wavezync/pulse-bridge","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wavezync%2Fpulse-bridge","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wavezync%2Fpulse-bridge/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wavezync%2Fpulse-bridge/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wavezync%2Fpulse-bridge/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/wavezync","download_url":"https://codeload.github.com/wavezync/pulse-bridge/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wavezync%2Fpulse-bridge/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":267477248,"owners_count":24093701,"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","status":"online","status_checked_at":"2025-07-28T02:00:09.689Z","response_time":68,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":"2025-07-28T07:15:13.909Z","updated_at":"2026-03-16T22:02:36.005Z","avatar_url":"https://github.com/wavezync.png","language":"Go","readme":"# Pulse Bridge\n\n[![Build](https://github.com/wavezync/pulse-bridge/actions/workflows/build.yml/badge.svg)](https://github.com/wavezync/pulse-bridge/actions/workflows/build.yml) ![GitHub Release](https://img.shields.io/github/v/release/wavezync/pulse-bridge)\n [![Docker](https://ghcr-badge.egpl.dev/wavezync/pulse-bridge/tags?color=%2344cc11\u0026ignore=latest\u0026n=3\u0026label=image+tags\u0026trim=)](https://github.com/wavezync/pulse-bridge/pkgs/container/pulse-bridge)\n\nPulse Bridge is a lightweight, powerful uptime monitoring tool for your internal infrastructure (APIs, databases, etc.) and external platforms.\n\n## How it works\n\nSimply create a configuration file to define multiple services and databases to be checked at custom intervals. Pulse Bridge records the health status of each service and database, and provides a simple HTTP API to query their status.\n\n### Currently supports\n\n- HTTP services\n- PostgreSQL\n- MySQL\n- MariaDB\n- Redis\n- MSSQL\n\n## Installation\n\nPulse Bridge can be deployed in various ways to suit your needs:\n\n- Binary for your [platform](https://github.com/wavezync/pulse-bridge/releases)\n- Docker\n- Kubernetes\n\n### Quick Install :zap:\n\nInstall the latest version with a single command:\n\n```bash\ncurl -fsSL https://raw.githubusercontent.com/wavezync/pulse-bridge/main/install.sh | bash\n```\n\n### Run locally (Build from source) :computer:\n\n```bash\ngit clone https://github.com/wavezync/pulse-bridge.git\ncd pulse-bridge\ngo run .\n```\n\n### Docker :whale:\n\n```bash\ndocker pull ghcr.io/wavezync/pulse-bridge:latest\ndocker run -d -p 8080:8080 ghcr.io/wavezync/pulse-bridge:latest\n```\n\nUpdate the [config.yml](https://github.com/wavezync/pulse-bridge/blob/main/config.yml) in the project root to add your services and databases. Then rebuild the binary or Docker image and run it.\n\n### Kubernetes :ship:\n\nThere are many ways to deploy Pulse Bridge on Kubernetes. Below is a simple example using a Deployment, Service, and ConfigMap.\n\n```yaml\napiVersion: apps/v1\nkind: Deployment\nmetadata:\n  name: pulse-bridge\nspec:\n  replicas: 1\n  selector:\n    matchLabels:\n      app: pulse-bridge\n  template:\n    metadata:\n      labels:\n        app: pulse-bridge\n    spec:\n      containers:\n      - name: pulse-bridge\n        image: wavezync/pulse-bridge:latest # Replace with your image if needed (recommended)\n        ports:\n        - containerPort: 8080\n        env:\n        - name: PULSE_BRIDGE_CONFIG\n          value: \"/config/config.yml\"\n        volumeMounts:\n        - name: config-volume\n          mountPath: /config\n      volumes:\n      - name: config-volume\n        configMap:\n          name: pulse-bridge-config\n---\napiVersion: v1\nkind: Service\nmetadata:\n  name: pulse-bridge\nspec:\n  selector:\n    app: pulse-bridge\n  ports:\n    - protocol: TCP\n      port: 8080\n      targetPort: 8080\n---\napiVersion: v1\nkind: ConfigMap\nmetadata:\n  name: pulse-bridge-config\ndata:\n  config.yml: |\n    # Paste your Pulse Bridge YAML config here. See the guide below for configuration details.\n```\n\n### Environment Configuration\n\n#### Environment Variables\n\nYou can set environment variables to configure Pulse Bridge. These variables can be used to override the default configuration file or set the host and port.\n\n  ```bash\n  PULSE_BRIDGE_CONFIG=mycustomconfig.yml # Sets the custom configuration file path, defaults to config.yml\n  HOST=0.0.0.0 # Defaults to 0.0.0.0\n  PORT=8080 # Defaults to 8080 \n  ```\n\n#### CLI arguments\n\n  CLI arguments take priority over environment variables and can be used to override the configuration file or set the host and port.\n\n  ```bash\n  pulse-bridge --config=mycustomconfig.yml --port=8080 --host=0.0.0.0\n  ```\n\n## Usage\n\n### Configuring your services\n\nThe configuration file is a YAML file where you can define the services and databases you want to monitor.\n\nDatabase monitors can be configured using a connection string or individual parameters (host, port, username, password, database name). The `driver` field is required to specify the database type (e.g., `postgres`, `mysql`, `mariadb`, `mssql`, `redis`).\n\nYou may also include a `query` field to run a custom SQL query for health checks, but it is not required.\n\nExample configuration:\n\n```yaml\nmonitors:\n  # HTTP service monitoring\n  - name: \"HTTP Service\"\n    type: \"http\"\n    interval: \"30s\"\n    timeout: \"5s\"\n    http:\n      url: \"http://helloworld-http:8080/ping\"\n      method: \"GET\"\n      headers:\n        Authorization: \"Bearer secret-token\"\n        Content-Type: \"application/json\"\n\n  # Postgres monitoring\n  - name: \"PostgreSQL Service\"\n    type: \"database\"\n    interval: \"30s\"\n    timeout: \"10s\"\n    database:\n      driver: \"postgres\"\n      connection_string: \"postgres://postgres:postgres@postgres-db:5432/monitoring?sslmode=disable\"\n      query: \"SELECT 1\"\n\n  # MySQL monitoring\n  - name: \"MySQL Service\"\n    type: \"database\"\n    interval: \"30s\"\n    timeout: \"10s\"\n    database:\n      driver: \"mysql\"\n      connection_string: \"root:mysql@tcp(mysql-db:3306)/monitoring\"\n      query: \"SELECT 1\"\n\n  # MariaDB monitoring\n  - name: \"MariaDB Service\"\n    type: \"database\"\n    interval: \"30s\"\n    timeout: \"10s\"\n    database:\n      driver: \"mariadb\"\n      connection_string: \"root:mariadb@tcp(mariadb-db:3306)/monitoring\"\n      query: \"SELECT 1\"\n\n  # Redis monitoring\n  - name: \"Redis Service Primary\"\n    type: \"database\"\n    interval: \"5s\"\n    timeout: \"5s\"\n    database:\n      driver: \"redis\"\n      database: \"1\"\n      host: \"redis-db\"\n      port: 6379\n      password: \"redispassword\"\n\n  # MSSQL monitoring\n  - name: \"MSSQL Service\" \n    type: \"database\"\n    interval: \"30s\"\n    timeout: \"10s\"\n    database:\n      driver: \"mssql\"\n      host: \"mssql-db\"\n      port: 1433\n      username: \"SA\"\n      password: \"Password1!\"\n      database: \"master\"\n      query: \"SELECT 1\"\n```\n\n### Monitoring\n\nYou can check the status of your service from the pulse bridge API at the routes:\n\n#### /monitor/services  \n\n- List all monitored services\n\n```json\n[\n  {\n    \"service\": \"HTTP Service\",\n    \"status\": \"healthy\",\n    \"type\": \"http\",\n    \"last_check\": \"2025-07-24 11:56:01.918452021 +0000 UTC m=+0.357002662\",\n    \"last_success\": \"2025-07-24 11:56:01.918443897 +0000 UTC m=+0.356994537\",\n    \"metrics\": {\n      \"response_time_ms\": 81,\n      \"check_interval\": \"30s\",\n      \"consecutive_successes\": 1\n    },\n    \"last_error\": \"\"\n  },\n  {\n    \"service\": \"PostgreSQL Service\",\n    \"status\": \"unhealthy\",\n    \"type\": \"database\",\n    \"last_check\": \"2025-07-24 11:56:01.891732112 +0000 UTC m=+0.330282750\",\n    \"last_success\": \"\",\n    \"metrics\": {\n      \"response_time_ms\": 50,\n      \"check_interval\": \"30s\",\n      \"consecutive_successes\": 0\n    },\n    \"last_error\": \"failed to ping database: dial tcp 172.23.0.3:5432: connect: connection refused\"\n  }\n ]\n```\n\n#### /monitor/services/{monitor_name}\n\n- Get details of a specific service\n\n```json\n  {\n    \"service\": \"MariaDB Service\",\n    \"status\": \"unhealthy\",\n    \"type\": \"database\",\n    \"last_check\": \"2025-07-24 11:56:01.89172233 +0000 UTC m=+0.330272963\",\n    \"last_success\": \"\",\n    \"metrics\": {\n      \"response_time_ms\": 33,\n      \"check_interval\": \"30s\",\n      \"consecutive_successes\": 0\n    },\n    \"last_error\": \"failed to ping database: dial tcp 172.23.0.7:3306: connect: connection refused\"\n  },\n```\n\n## Contributing :heart:\n\nWe welcome contributions! If you have ideas, bug fixes, or improvements, please open an issue or submit a pull request.\n\nKeep your systems transparent, your teams informed, and your users confident with Pulse Bridge – the heartbeat of your infrastructure. 🌊\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwavezync%2Fpulse-bridge","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fwavezync%2Fpulse-bridge","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwavezync%2Fpulse-bridge/lists"}