{"id":25984769,"url":"https://github.com/lifailon/pinguem","last_synced_at":"2025-03-05T11:35:03.253Z","repository":{"id":276764657,"uuid":"876611731","full_name":"Lifailon/pinguem","owner":"Lifailon","description":"Web interface based on Vue for async checking of the availability of the selected hosts or subnet using the node-ping library.","archived":false,"fork":false,"pushed_at":"2025-02-21T08:38:21.000Z","size":2256,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-01T11:29:00.298Z","etag":null,"topics":["docker","ping","typescript","vue","web"],"latest_commit_sha":null,"homepage":"https://hub.docker.com/r/lifailon/pinguem","language":"Vue","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Lifailon.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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}},"created_at":"2024-10-22T09:09:02.000Z","updated_at":"2025-02-21T08:37:05.000Z","dependencies_parsed_at":"2025-02-10T10:32:08.156Z","dependency_job_id":"b8c40ce2-616a-49dc-8703-a687730bca26","html_url":"https://github.com/Lifailon/pinguem","commit_stats":null,"previous_names":["lifailon/pinguem"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Lifailon%2Fpinguem","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Lifailon%2Fpinguem/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Lifailon%2Fpinguem/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Lifailon%2Fpinguem/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Lifailon","download_url":"https://codeload.github.com/Lifailon/pinguem/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":242020485,"owners_count":20058970,"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":["docker","ping","typescript","vue","web"],"created_at":"2025-03-05T11:34:56.905Z","updated_at":"2025-03-05T11:35:02.110Z","avatar_url":"https://github.com/Lifailon.png","language":"Vue","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003ch2 align=\"center\"\u003e\n    Pinguem\n\u003c/h2\u003e\n\n\u003cp align=\"center\"\u003e\n        \u003ca href=\"https://www.npmjs.com/package/pinguem\"\u003e\u003cimg title=\"npm version\"src=\"https://img.shields.io/npm/v/pinguem?logo=npm\u0026logoColor=red\"\u003e\u003c/a\u003e\n        \u003ca href=\"https://hub.docker.com/r/lifailon/pinguem\"\u003e\u003cimg title=\"docker image size\"src=\"https://img.shields.io/docker/image-size/lifailon/pinguem?\u0026color=blue\u0026logo=Docker\u0026label=Docker+Image\"\u003e\u003c/a\u003e\n\u003c/p\u003e\n\nWeb interface based on [Vue](https://github.com/vuejs/core) and the [Prometheus](https://github.com/prometheus/prometheus) exporter for async checking of the availability of the selected hosts or subnet using the [node-ping](https://github.com/danielzzz/node-ping) library.\n\nAll fields for entering addresses are dynamic, and are stored on the side of the client (in the browser) after rebooting the server and the user system. For a survey of the entire subnet, use 0 in the 4 octet (example, `192.168.3.0`), it is possible to simultaneously indicate a few subnet. It is recommended to launch in the Docker container, you can check `254`, `508` and more hosts every second without delay. The ping stops at the time of closing the browser tab, while the results is stored on the server in memory until they are discharged through the interface or API.\n\n## Install\n\n### Docker\n\nDownload the image from [Docker Hub](https://hub.docker.com/r/lifailon/pinguem) and run the container:\n\n\u003c!--\ndocker build -t lifailon/pinguem .\n--\u003e\n\n```shell\ndocker run -d --name pinguem -p 8085:8085 -p 3005:3005 --restart=unless-stopped lifailon/pinguem:latest\n```\n\n### Build\n\nClone the repository and install the dependencies:\n\n```shell\ngit clone https://github.com/Lifailon/pinguem\ncd pinguem\nnpm install\n```\n\nStart backend (port `3005`) and frontend (port `8085`):\n\n```shell\nnpm start\n```\n\nGo to: `http://localhost:8085`\n\n![example](/image/light.jpg)\n\nDark mode:\n\n![example](/image/dark.jpg)\n\nYou can get checking results at the current time using `GET` request via `API`:\n\n`curl -sS http://localhost:3005/result | jq .`\n\n```json\n{\n  \"192.168.3.101\": {\n    \"host\": \"192.168.3.101\",\n    \"time\": 1,\n    \"status\": \"Available\",\n    \"lastAvailable\": \"2025-02-10T21:33:35.530Z\",\n    \"lastUnavailable\": null,\n    \"successful\": 100,\n    \"failed\": 0\n  },\n  \"google.com\": {\n    \"host\": \"google.com\",\n    \"time\": 22,\n    \"status\": \"Available\",\n    \"lastAvailable\": \"2025-02-10T21:33:35.524Z\",\n    \"lastUnavailable\": \"2025-02-10T21:32:19.236Z\",\n    \"successful\": 90,\n    \"failed\": 10\n  },\n  \"8.8.8.8\": {\n    \"host\": \"8.8.8.8\",\n    \"time\": 21,\n    \"status\": \"Available\",\n    \"lastAvailable\": \"2025-02-10T21:33:35.527Z\",\n    \"lastUnavailable\": null,\n    \"successful\": 100,\n    \"failed\": 0\n  },\n  \"github.com\": {\n    \"host\": \"github.com\",\n    \"time\": 47,\n    \"status\": \"Available\",\n    \"lastAvailable\": \"2025-02-10T21:33:35.521Z\",\n    \"lastUnavailable\": \"2025-02-10T21:33:32.535Z\",\n    \"successful\": 97,\n    \"failed\": 3\n  },\n  \"192.168.3.102\": {\n    \"host\": \"192.168.3.102\",\n    \"time\": \"unknown\",\n    \"status\": \"Unavailable\",\n    \"lastAvailable\": null,\n    \"lastUnavailable\": \"2025-02-10T21:33:35.534Z\",\n    \"successful\": 0,\n    \"failed\": 100\n  }\n}\n```\n\n## Ping Exporter\n\n- Metrics for prometheus:\n\n```shell\ncurl -sS http://localhost:3005/metrics/\u003csubnet\u003e\n```\n\n- Specify the target subnet to monitor in the `prometheus.yml` configuration:\n\n```yaml\nscrape_configs:\n  - job_name: ping-exporter\n    scrape_interval: 10s\n    scrape_timeout: 5s\n    metrics_path: /metrics/192.168.3.0\n    static_configs:\n      - targets:\n        - '192.168.3.100:3005'\n```\n- Import a ready [Dashboard](grafana-ping-exporter.json) for Grafana:\n\n![grafana](/image/grafana.jpg)\n\nDisplays the number of active and inactive hosts in the subnet, all host addresses that change their status over the selected period of time, and graphs of the stability of active hosts.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flifailon%2Fpinguem","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flifailon%2Fpinguem","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flifailon%2Fpinguem/lists"}