{"id":22567761,"url":"https://github.com/uratne/webtail","last_synced_at":"2026-04-28T11:34:07.355Z","repository":{"id":264873414,"uuid":"894531284","full_name":"uratne/webtail","owner":"uratne","description":"Just a tail to a file that you can watch from the UI.","archived":false,"fork":false,"pushed_at":"2025-01-03T17:18:14.000Z","size":962,"stargazers_count":0,"open_issues_count":1,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-28T13:45:37.242Z","etag":null,"topics":["actix-web","rust","svelte","tail","tokio","websocket"],"latest_commit_sha":null,"homepage":"","language":"Rust","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/uratne.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}},"created_at":"2024-11-26T14:17:12.000Z","updated_at":"2025-01-03T17:18:18.000Z","dependencies_parsed_at":"2025-01-09T01:45:41.840Z","dependency_job_id":null,"html_url":"https://github.com/uratne/webtail","commit_stats":null,"previous_names":["uratne/webtail"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/uratne/webtail","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/uratne%2Fwebtail","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/uratne%2Fwebtail/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/uratne%2Fwebtail/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/uratne%2Fwebtail/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/uratne","download_url":"https://codeload.github.com/uratne/webtail/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/uratne%2Fwebtail/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32379373,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-28T11:25:28.583Z","status":"ssl_error","status_checked_at":"2026-04-28T11:25:05.435Z","response_time":56,"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":["actix-web","rust","svelte","tail","tokio","websocket"],"created_at":"2024-12-08T00:09:04.556Z","updated_at":"2026-04-28T11:34:07.335Z","avatar_url":"https://github.com/uratne.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003ch1 style=\"text-align: center\"\u003eWEB TAIL\u003c/h1\u003e\n\n![Svelte Badge](https://img.shields.io/badge/Svelte-FF3E00?logo=svelte\u0026logoColor=fff\u0026style=flat)![Vite Badge](https://img.shields.io/badge/Vite-646CFF?logo=vite\u0026logoColor=fff\u0026style=flat)![Rust Badge](https://img.shields.io/badge/Rust-000?logo=rust\u0026logoColor=fff\u0026style=flat)![.ENV Badge](https://img.shields.io/badge/.ENV-ECD53F?logo=dotenv\u0026logoColor=000\u0026style=flat)\n\u003cbr\u003e\n\u0026emsp; WebTail is just a tail to a file that you can watch from the UI. There's 3 parts to the project. UI, Server \u0026 Client. Here client is the one who connects from servers/pods/instances to push data to the server. Both Server \u0026 Client are rust applications. Server has a simple actix server. Client is Svelte application.\n\n## Goal\n- Main goal of this project is to learn svelte, and work on my rust. \n- Also fed up of wasting time trying to figure out the mess shown in the EFK logs.\n- Just want to get a familiar [`tail`](https://www.ibm.com/docs/en/aix/7.3?topic=t-tail-command) for the application I want to check logs of.\n## Architecture\n![Architecture](./resources/webtail.png)\n\n## Server\nServer will serve the UI and will act as a router for the data coming in from clients, server will expose web sockets for clients to connect and send the live feed, and expose SSE end points for UI users to connect and get the application log. Users can select an application from the drop down to look at the logs of the application (application - server/pod/instance).\n\n### Server Architecture\n#### In Development\n![In Development](./resources/wt_in_development.jpg)\n\n#### In Production\n![In Production](./resources/wt_in_production.jpg)\n\n## Development\n1. clone the [`repository`](https://github.com/uratne/webtail) and setup submodule.\n```bash\ngit clone https://github.com/uratne/webtail\ncd webtail\ngit submodule init\ngit submodule update\n```\n2. UI is in the [`fronentd`](https://github.com/uratne/webtail-front) directory.\n\n3. As the [above](#in-development) document shows we can up a vite server using\n```bash\nnpm run dev\n```\n- this let's us have hot reloading features and other features from vite.\n4. To up the client\n```bash\ncargo run --bin client\n```\n5. To up the server\n```bash\ncargo run --bin server\n```\n6. Running `main.rs` will give you these commands.\n```bash\ncargo run\n```\n\n## Deployment\nCurrently Server is also a binary, later server and ui will be packaged togeather in a container for simpler deployment\n1. Server\n    1. add `.env` to the directory you are running server from\n    2. `PATH_TO_FRONTEND` in `.env` should point to the build direrctory of the frontend\n    3. run server\n2. Client\n    1. configure `webtail_config,json`\n        1. `app_name`, can be a SinglePod application or MultiplePod (instance) application. If it's MultiplePod set the pod_name also, this application name and pod name will be shown in the front end to select. \n        2. `log_file_dir`, is the relative/absolute path to the log file you want to tail\n        3. `log_file_name_regex`, is the name of the file, regex is accepted here. If you are using a regex first found file will be tailed. Regex is allowed as for some reason log files are named with data time or something.\n        4. `server_host`, is the host to connect to the server\n        5. `server_port`, is the port to connect to the server, set 0 to the port if a port is not required\n        6. `server_path`, is the path to connect to the server\n        - If `server_port` \u003e 0\n        \u003e ws://`server_host`:`server_port`/`server_path`\n\n        - If `server_port` == 0\n        \u003e ws://`server_host`/`server_path`\n\n        7.`channel_buffer` is the buffer size of the `tokio::mpsc::channel`, leave it between 10-100\n\n    1. add `webtail_config.json` to the directory you are running client from\n    2. run client\n\n## Roadmap\n1. Login Page\n2. Use binary for server client communication using [`borsh`](https://borsh.io).\n3. Setup proper loging for server and client.\n4. Manage `SIGTERM` for client and end web socket gracefully.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Furatne%2Fwebtail","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Furatne%2Fwebtail","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Furatne%2Fwebtail/lists"}