aw-server-rust: Máy chủ ActivityWatch viết bằng Rust
aw-server-rust là bản viết lại bằng Rust của aw-server gốc (viết bằng Python), đóng vai trò backend REST API cho ActivityWatch với chi phí vận hành thấp hơn bản Python. Nên chọn nếu bạn đã dùng ActivityWatch và muốn chạy một file thực thi biên dịch sẵn thay vì một tiến trình Python; nên bỏ qua nếu bạn cần trình khám phá API kiểu Swagger/OpenAPI, vì tính năng này chưa có trong phiên bản Rust.
aw-server-rust là gì?
aw-server-rust là bản Rust của máy chủ ActivityWatch: thành phần backend chạy tại chỗ, nơi các trình theo dõi (watcher) của ActivityWatch gửi dữ liệu hoạt động lên qua REST API. Nó thay thế aw-server viết bằng Python trước đây, lưu trữ và đồng bộ dữ liệu theo dõi thời gian cho ứng dụng desktop ActivityWatch cùng các tiện ích mở rộng trình duyệt. Dự án còn đi kèm aw-sync-rust, thành phần đồng bộ được mô tả riêng trong README ở thư mục con của nó.
Năng lực cốt lõi
- ✓Bản viết lại bằng Rust của aw-server, build qua Cargo (`cargo build --release`) hoặc target `make build` để dựng luôn cả phần web assets
- ✓Đóng vai trò backend REST API cho các trình theo dõi và watcher của ActivityWatch, lắng nghe ở cổng 5600 theo mặc định (5666 khi chạy ở chế độ testing)
- ✓Cấu hình qua file TOML tại `~/.config/activitywatch/aw-server-rust/config.toml`, gồm địa chỉ lắng nghe, cổng và danh sách origin CORS
- ✓Danh sách CORS mặc định đã cho phép origin của chính server, tiện ích mở rộng Chrome chính thức của ActivityWatch, và mọi tiện ích mở rộng Firefox, cùng quy tắc regex để thêm origin tùy chỉnh
- ✓Đi kèm aw-sync-rust, thành phần đồng bộ dữ liệu được mô tả riêng trong README ở thư mục con của nó
- ✓Cấp phép theo MPL-2.0, gắn thẻ REST API, sync và time-tracking trên GitHub
Build và cài đặt
Để build aw-server-rust bạn cần có Cargo. Chạy `cargo build --release` từ thư mục gốc dự án, file thực thi sau khi build xong nằm ở `./target/release/aw-server-rust`. Nếu muốn dựng luôn cả phần web assets đi kèm trong cùng một bước, chạy `make build` thay vì lệnh trên. Để debug cục bộ, `cargo run --bin aw-server` sẽ vừa compile vừa chạy server ngay, nhưng lệnh này khởi động ở chế độ testing trên cổng 5666 thay vì cổng 5600 dùng cho production. Nếu bạn đang ghép một bản build phát triển với `aw-qt`, hãy copy file thực thi bản release vào thư mục bin của virtualenv bằng `cp target/release/aw-server ../venv/bin/aw-server-rust` để ứng dụng khay hệ thống nhận đúng bản build tùy chỉnh của bạn.
Điểm mạnh
- ✓Biên dịch thành một file thực thi native duy nhất, nên chạy backend không cần trình thông dịch Python hay virtualenv như aw-server bản gốc
- ✓Cách xử lý CORS được ghi rõ trong file cấu hình (origin mặc định, quy tắc regex cho tiện ích mở rộng sideload) thay vì để hành vi cross-origin mập mờ
- ✓Nằm trong cùng hệ sinh thái ActivityWatch, nên có thể thay thế trực tiếp cho backend Python khi dùng chung với `aw-qt`
- ✓Giấy phép MPL-2.0 giữ mã nguồn mở nhưng vẫn cho phép liên kết từ các module độc quyền riêng biệt, dễ chịu hơn so với một giấy phép copyleft mạnh hơn với ai muốn nhúng nó vào sản phẩm khác
Tính năng còn thiếu hiện tại
- △README chỉ liệt kê đúng một khoảng trống tính năng so với aw-server bản Python: chưa có trình khám phá API kiểu Swagger/OpenAPI, nên bạn không thể duyệt các REST endpoint một cách trực quan mà phải đọc source hoặc tài liệu API riêng
- △Tài liệu setup dừng lại ở phần build và cấu hình: README không hướng dẫn triển khai nó như một service độc lập (systemd unit, image Docker, v.v.), nên phần còn lại sau `cargo run` hay `make build` bạn phải tự lo
- △Đây là một mảnh ghép trong hệ sinh thái ActivityWatch rộng hơn, không phải sản phẩm độc lập: tự thân nó chỉ là backend REST API không có giao diện, bạn vẫn cần `aw-qt` hoặc một watcher khác để đưa dữ liệu hoạt động vào
- △MPL-2.0 là copyleft ở cấp độ file, nhẹ hơn GPL, nhưng vẫn là điều cần kiểm tra nếu bạn định đóng gói file thực thi này vào một sản phẩm mã nguồn đóng
Các triển khai máy chủ ActivityWatch khác
Câu hỏi thường gặp
aw-server-rust chạy phần backend lưu trữ và phục vụ dữ liệu theo dõi thời gian của ActivityWatch qua REST API, thay thế aw-server bản Python để các watcher như aw-qt và tiện ích mở rộng trình duyệt có một tiến trình Rust biên dịch sẵn để gửi sự kiện hoạt động tới.
Bạn thêm các origin được phép vào mảng `cors` (khớp chính xác) hoặc `cors_regex` (khớp theo mẫu) trong file config.toml của aw-server-rust. Mặc định nó đã cho phép origin của chính server, tiện ích mở rộng Chrome chính thức và mọi tiện ích mở rộng Firefox, nên bạn chỉ cần khai báo thêm cho tiện ích mở rộng sideload hoặc giao diện web tùy chỉnh.
README nêu đúng một khoảng trống: aw-server-rust chưa có trình khám phá API kiểu Swagger/OpenAPI mà aw-server bản Python đang có để duyệt REST endpoint trực quan.
aw-server-rust được phát hành theo giấy phép MPL-2.0, giấy phép copyleft ở cấp độ file của Mozilla.
aw-server-rust lắng nghe ở cổng 5600 theo mặc định, và tự chuyển sang cổng 5666 khi chạy ở chế độ testing qua `cargo run`.
Vấn đề mà nó giải quyết
aw-server gốc của ActivityWatch chạy trên Python, nghĩa là ai tự triển khai nó cũng phải chuẩn bị sẵn môi trường Python và một virtualenv đi kèm trình theo dõi. aw-server-rust loại bỏ phụ thuộc đó: nó là một file thực thi biên dịch bằng Cargo, nên phần backend REST API lưu và phục vụ dữ liệu theo dõi thời gian của bạn không còn cần chạy song song với một runtime Python bên cạnh ứng dụng khay hệ thống aw-qt.
Trường hợp sử dụng tốt nhất
- •Chạy làm backend cục bộ cho một cài đặt ActivityWatch tiêu chuẩn, dùng chung với `aw-qt` và các watcher của nó, khi bạn muốn một file thực thi Rust nhẹ hơn thay vì server Python
- •Tự triển khai toàn bộ dữ liệu theo dõi thời gian của riêng bạn: sự kiện hoạt động ở lại trên máy, chỉ được phục vụ qua REST API mà bạn tự cấu hình
- •Phát triển một dashboard web hoặc tiện ích mở rộng trình duyệt tùy chỉnh gọi vào REST API của ActivityWatch, dùng cấu hình CORS để cho phép origin của bạn trong lúc phát triển
- •Đồng bộ dữ liệu hoạt động giữa nhiều máy qua thành phần đi kèm aw-sync-rust, theo README riêng ở thư mục con của nó
Nên dùng — và nên bỏ qua khi nào
Nên thử aw-server-rust nếu bạn đã dùng ActivityWatch và muốn backend của nó chạy như một file thực thi biên dịch sẵn thay vì một tiến trình Python: đây là một lựa chọn thay thế đơn giản nếu bạn quen build từ source bằng Cargo. Nên bỏ qua nếu bạn cần trình khám phá API kiểu Swagger/OpenAPI để duyệt endpoint trực quan, hoặc nếu bạn không muốn build từ source.
