{"id":21853976,"url":"https://github.com/gmemstr/platypus","last_synced_at":"2025-08-22T07:31:02.692Z","repository":{"id":68805339,"uuid":"68666902","full_name":"gmemstr/Platypus","owner":"gmemstr","description":"Large-scale server monitoring application written in Golang","archived":false,"fork":false,"pushed_at":"2020-05-08T00:21:50.000Z","size":13134,"stargazers_count":205,"open_issues_count":8,"forks_count":10,"subscribers_count":12,"default_branch":"master","last_synced_at":"2024-12-11T07:12:35.120Z","etag":null,"topics":["go","golang","platypus","scanning","server-stats","statistics","sysadmin","uptime","websockets"],"latest_commit_sha":null,"homepage":"https://status.gmem.ca","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/gmemstr.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","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},"funding":{"github":"gmemstr"}},"created_at":"2016-09-20T02:42:45.000Z","updated_at":"2024-12-02T13:21:46.000Z","dependencies_parsed_at":null,"dependency_job_id":"b9c62cd9-1ee0-47eb-a535-243ac3d9ea70","html_url":"https://github.com/gmemstr/Platypus","commit_stats":null,"previous_names":[],"tags_count":11,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gmemstr%2FPlatypus","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gmemstr%2FPlatypus/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gmemstr%2FPlatypus/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gmemstr%2FPlatypus/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/gmemstr","download_url":"https://codeload.github.com/gmemstr/Platypus/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":230568590,"owners_count":18246378,"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":["go","golang","platypus","scanning","server-stats","statistics","sysadmin","uptime","websockets"],"created_at":"2024-11-28T01:28:16.474Z","updated_at":"2024-12-20T10:08:56.752Z","avatar_url":"https://github.com/gmemstr.png","language":"Go","funding_links":["https://github.com/sponsors/gmemstr"],"categories":[],"sub_categories":[],"readme":"# Platypus\n## Simple realtime server monitoring\n\n[![CircleCI](https://circleci.com/gh/gmemstr/Platypus.svg?style=svg)](https://circleci.com/gh/gmemstr/Platypus)\n[![https://img.shields.io/badge/demo-status.gmem.ca-black.svg](https://img.shields.io/badge/demo-status.gmem.ca-black.svg?style=for-the-badge)](https://status.gmem.ca) \n[![https://img.shields.io/badge/frontend-gmemstr%2Fplatypus--react-blue.svg](https://img.shields.io/badge/frontend-gmemstr%2Fplatypus--react-blue.svg?style=for-the-badge)](https://github.com/gmemstr/platypus-react)\n\n### Dependencies\n\n```bash\ngo get github.com/gorilla/mux\ngo get github.com/gorilla/websocket\ngo get github.com/go-yaml/yaml\ngo get github.com/shirou/gopsutil\n```\n\n### Usage\n\nMaster server:\n```bash\ngo build -o platypus main.go\nchmod +x platypus\n./platypus\n```\n\nClient servers:\n```bash\ngo build -o platypus_client client/client.go\nchmod +x platypus_client\nnano config.yml\n# Input your secret key and master server IP here, secret key found on master server in .secret\n# master: example.com\n# secret: s3cr3tk3y\n# End config\n./platypus_client\n```\n\nNavigate to your master server and check out the stats.\n\n## Rewrite \n\nRewriting this from the ground up. Why did I do this in Python.\n\nThe goal of the rewrite is to move away from using Python for the entire stack \nand instead break things up into smaller chunks, maybe moving this to it's own\nGitHub / Gitlab org, which will allow it to be much more modular and open ended\nwhen it comes to what kind of information you want to monitor and how.\n\n### Steps\n\n1. Rewriting the core functionality, which is a basic stats dashboard\nand server management through an admin interface. We also want to rethink how to\nhandle Active Online Reporting - websockets still _seems_ like the best option\nfor this but there's got to be a better way. Might opt for Go master server\nside as it's something I have experience in and should offer good performance etc.\n\n2. Rebuild the client based on the specifications of #1, and deciding the best\nway to build and distribute the package w/ configuration - I personally want to\ngo with something we can compile into a very small package and ship with a\nmaster server-generated configuration file of some sort. Was thinking C++ might\nbe a good option over Go size wise but there could be additional time overhead.\n\n3. Write a straightforward API both client (or \"node\") side, which would allow\napplications to construct and send custom messages to the master server, and\nmaster server side, which will handle said customer messages. This should be fairly\nstraightforward once we have #1 and #2 complete.\n\n4. A plugin system - I don't really know what form this would take since it's pretty\nfar down the line, but it's something to consider. Some sort of simple scripting\nlanguage that we can easily write an interpreter for in Go for the master server and\nwould expose various variables / functions.\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgmemstr%2Fplatypus","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgmemstr%2Fplatypus","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgmemstr%2Fplatypus/lists"}