{"id":18960256,"url":"https://github.com/bisohns/saido","last_synced_at":"2025-08-29T21:40:39.825Z","repository":{"id":42970479,"uuid":"380238440","full_name":"bisohns/saido","owner":"bisohns","description":"YAML based tool for monitoring metrics across multiple hosts","archived":false,"fork":false,"pushed_at":"2023-01-09T02:27:08.000Z","size":19845,"stargazers_count":59,"open_issues_count":4,"forks_count":4,"subscribers_count":9,"default_branch":"main","last_synced_at":"2025-07-27T11:47:53.452Z","etag":null,"topics":["dashboard","disk-space","golang","memory","memory-management","monitoring","monitoring-tool","server","ssh","web-monitoring","yaml","yaml-configuration"],"latest_commit_sha":null,"homepage":"","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/bisohns.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-06-25T12:58:31.000Z","updated_at":"2025-02-19T14:56:07.000Z","dependencies_parsed_at":"2023-02-08T08:32:05.321Z","dependency_job_id":null,"html_url":"https://github.com/bisohns/saido","commit_stats":null,"previous_names":["bisoncorps/saido"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/bisohns/saido","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bisohns%2Fsaido","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bisohns%2Fsaido/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bisohns%2Fsaido/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bisohns%2Fsaido/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/bisohns","download_url":"https://codeload.github.com/bisohns/saido/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bisohns%2Fsaido/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":272766963,"owners_count":24989408,"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-08-29T02:00:10.610Z","response_time":87,"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":["dashboard","disk-space","golang","memory","memory-management","monitoring","monitoring-tool","server","ssh","web-monitoring","yaml","yaml-configuration"],"created_at":"2024-11-08T14:05:00.562Z","updated_at":"2025-08-29T21:40:39.773Z","avatar_url":"https://github.com/bisohns.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# saido\nsaido means monitor in [Hausa](https://en.wikipedia.org/wiki/Hausa_language)\n\n![Logo](assets/Saido300.jpg)\n\n[![Test-Linux](https://github.com/bisohns/saido/actions/workflows/test-ssh.yml/badge.svg)](https://github.com/bisohns/saido/actions/workflows/test-ssh.yml)\n[![Test-MacOs](https://github.com/bisohns/saido/actions/workflows/test-macos.yml/badge.svg)](https://github.com/bisohns/saido/actions/workflows/test-macos.yml)\n[![Test-Windows](https://github.com/bisohns/saido/actions/workflows/test-windows.yml/badge.svg)](https://github.com/bisohns/saido/actions/workflows/test-windows.yml)\n\n## Demo\n![Demo](assets/demo.gif)\n\n## Installation\nNOTE: We've currently only tested on `Mac Os`, `Windows 11` and `Linux Ubuntu 20.04 LTS`\n### Installing Binary\nDownload latest binary for the target machine from [Github Releases](https://github.com/bisohns/saido/releases/latest)\n#### Windows Cmd\n```cmd\nREM Check your `PATH` \npath\nREM Copy the saido binary to a directory that is on your `PATH`\ncopy \u003cpath_to_saido_binary\u003e \u003cpath\u003e\n```\n#### Windows Powershell\n```powershell\n#Appends to existing path\n$env:Path += \";\u003cpath_to_saido_binary\u003e\" \n```\n#### Linux or Mac OS \n```bash \n#Add saido to your `.bashrc` or `.zshrc`\nalias saido=\"\u003cpath_to_saido_binary\u003e\" \n\n#Or Copy binary to your bin directory\ncp \u003cpath_to_saido_binary\u003e /usr/local/bin \n```\n### Development\nNOTE: `!windows` flag is our current specification of what `unix` means, see [issue](https://github.com/golang/go/issues/20322) for why *_unix.go files will still attempt to run on windows.\n#### Requirements\n- [Golang](https://go.dev/doc/install)\n- [Docker](https://docs.docker.com/get-docker/)\n- [Yarn](https://classic.yarnpkg.com/lang/en/docs/install/)\n- [Air](https://github.com/cosmtrek/air)\n```bash\ngit clone https://github.com/bisohns/saido\ncd saido\n## Update dependencies\nmake dependencies\n\n# Build and serve frontend\nmake app\n\n# Modify generated `config-test.yaml` file and air would reload server\n```\n\n## Usage\nThe simplest usage is running\n```bash\n# binary is downloaded and named as saido\nsaido --config \u003cpath_to_configuration_yaml_file\u003e --port 3000 --verbose\n```\nSaido cli flags \u0026 commands\n```bash\nSaido\nTool for monitoring metrics\n\nUsage:\n  saido [flags]\n  saido [command]\n\nAvailable Commands:\n  completion  Generate the autocompletion script for the specified shell\n  help        Help about any command\n  version     Get saido version\n\nFlags:\n      --config string   Path to config file\n  -h, --help            help for saido\n  -b, --open-browser    Prompt open browser\n  -p, --port string     Port to run application server on (default \"3000\")\n  -v, --verbose         Run saido in verbose mode\n\nUse \"saido [command] --help\" for more information about a command.\n```\n\n## Yaml Configuration File\nNOTE: Use single qoutes (`''`) for any string within the config file.\n### Hosts\n`hosts`\n#### Supported hosts command\nNOTE: The broad assumptions we make is that the host names are treated as unique.\n* `children` - a list of hosts with host names\n#### Setting up local connection to host\n```yaml\nhosts:\n  children:\n    # Host with host name `localhost`\n    'localhost':\n        connection:\n            # define `connection` with  `type` as `local` \n            type: local\n        metrics:\n            memory:\n            disk:\n            tcp:\n            docker:\n            uptime:\npoll-interval: 10\n```\n#### Setting up ssh connection to host (with ssh username and password)\n```yaml\nhosts:\n   children:\n   # Host with host name `192.168.166.167`\n    '192.168.166.167':\n      connection:\n        # define `connection` with `type` as `ssh` \n        type: ssh\n        # define `username` and `password` for connection to ssh server\n        username: \u003cusername\u003e\n        password: \u003cpassword\u003e\n      metrics:\n        custom-ls: 'ls $HOME/app'\nmetrics:\n  memory:\n  disk:\n  tcp:\n  docker:\n  uptime:\npoll-interval: 10\n```\n#### Setting up ssh connection to host (with ssh private key and port)\n```yaml\nhosts:\n   children:\n   # Host with host name `0.0.0.0`\n     '0.0.0.0':\n      connection:\n        # define `connection` with `type` as `ssh` \n        type: ssh\n        # define `username` and `port` and `private_key_path` for connection to ssh server\n        username: \u003cusername\u003e\n        port: 2222\n        private_key_path: 'path_to_private_key'\nmetrics:\n  memory:\n  disk:\n  tcp:\n  docker:\n  uptime:\npoll-interval: 10\n```\n#### Setting up ssh connection to host (with ssh a password protected private key)\n```yaml\nhosts:\n   children:\n   # Host with host name `0.0.0.0`\n     '0.0.0.0':\n      connection:\n        # define `connection` with `type` as `ssh` \n        type: ssh\n        # define `username` and `port` , `private_key_path` and `private_key_passphrase` for connection to ssh server\n        username: \u003cusername\u003e\n        port: 2222\n        private_key_path: \u003c'path_to_private_key'\u003e\n        private_key_passphrase: \u003cprivate_key_passphrase\u003e\nmetrics:\n  memory:\n  disk:\n  tcp:\n  docker:\n  uptime:\npoll-interval: 10\n```\n### Metrics\n`metrics`\n#### Supported metrics command\nNOTE: Custom metrics with commands can be added to the configuration file\n* `memory` - for calculating memory usage\n* `disk`- for calculating disk usage\n* `tcp` - for getting tcp connection information\n* `docker` - for getting docker container information\n* `uptime` - for calculating uptime and idle time of the host\n#### Setting Global metrics \n```yaml\nhosts:\n  children:\n    'localhost':\n        connection:\n            type: local\n    '0.0.0.0':\n      connection:\n        type: ssh\n        username: \u003cusername\u003e\n        port: 2222\n        private_key_path: '\u003cpath_to_private_key\u003e'\n# Metrics are defined on a global scope. Same level with the hosts\nmetrics:\n    memory:\n    disk:\n    tcp:\n    docker:\n    uptime:\npoll-interval: 10\n```\n#### Setting Local metrics\n```yaml\nhosts:\n  children:\n    'localhost':\n        connection:\n            type: local\n        # Metrics are defined within a host (localhost) scope\n        metrics:\n            memory:\n            disk:\n            tcp:\n            docker:\n            uptime:\npoll-interval: 10\n```\n#### Setting Custom metrics\n```yaml\nhosts:\n  children:\n    'localhost':\n        connection:\n            type: local\n        # A custom metric named `custom-ls` with a command `ls $HOME/app` is defined within a host (localhost) scope\n        metrics:\n            custom-ls: 'ls $HOME/app'   \npoll-interval: 10\n```\n### Polling\n`polling-interval` - interval in seconds between requests to host (value must be greater than or equal to 5 seconds)\n#### Example\nNOTE: Use a reasonable time interval between 10-30 seconds to avoid overloading server\n```yaml\nhosts:\n  children:\n    'localhost':\n        connection:\n            type: local\n        metrics:\n            disk: \n# polling-interval set to 5 seconds\npoll-interval: 5  \n```\n\n## Deployment\n### Tagging\nTo create a new tag, use the make file\n```bash\nmake upgrade version=0.x.x\n```\nThis will tag a new version, push to github and trigger goreleaser\n\n## License\nThe project is opened under the [Apache License](https://github.com/bisohns/saido/blob/master/LICENSE)\n### Credits\n - Logo by [Williams Praise](https://github.com/kubyruby)\n - Goph by [Melbahja](https://github.com/melbahja/goph)","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbisohns%2Fsaido","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbisohns%2Fsaido","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbisohns%2Fsaido/lists"}