Tài liệu tham khảo API thư viện ứng dụng đo từ xa Rust

Trang này mô tả các loại, phương thức và cách xử lý lỗi trong thư viện libsdv_telemetry_rust_wrapper.

Giao diện TelemetryServiceHolder

Giao diện chính cho các ứng dụng là cấu trúc TelemetryServiceHolder. Giao diện này cung cấp đầy đủ các phương thức để quản lý kết nối dịch vụ, cấu hình chỉ số và báo cáo dữ liệu.

Quản lý vòng đời dịch vụ

Các phương thức này thiết lập và chấm dứt kết nối với dịch vụ Telemetry cơ bản.

get

pub fn get() -> TelemetryResult<TelemetryServiceHolder>

Một phương thức tĩnh truy xuất một thao tác an toàn theo luồng đến dịch vụ Telemetry. Đây là một lệnh gọi chặn, chờ cho đến khi dịch vụ liên kết đo từ xa sẵn sàng. Dịch vụ Đo từ xa chỉ hỗ trợ một phiên bản duy nhất của TelemetryServiceHolder. Việc gọi phương thức này nhiều lần sẽ gây ra hành vi không xác định hoặc không mong muốn.

TelemetryServiceHolder triển khai các đặc điểm SendSync, nghĩa là bạn có thể chia sẻ một cách an toàn trên các luồng, chẳng hạn như bằng cách gói trong một thực thể của Arc. Hầu hết các phương thức của TelemetryServiceHolder đều là async và có thể được dùng đồng thời.

Giá trị trả về
TelemetryResult<TelemetryServiceHolder> Kết quả chứa mã nhận dạng dịch vụ hoặc phiên bản TelemetryError nếu không thể lấy dịch vụ

init

pub async fn init(
    &self,
    misc_status_callback: impl Fn(TelemetryServiceStatus) + Send + Sync + 'static,
    report_ready_callback: impl Fn(ReportInfo) + Send + Sync + 'static,
) -> TelemetryResult<()>

Khởi động dịch vụ bằng cách đăng ký các lệnh gọi lại không đồng bộ. Gọi phương thức này một lần sau khi nhận được TelemetryServiceHolder và trước khi có bất kỳ hoạt động tương tác nào khác.

Tham số
misc_status_callback impl Fn(TelemetryServiceStatus) + Send + Sync + 'static: Một đóng có chức năng nhận và xử lý thông tin cập nhật về trạng thái và lỗi từ dịch vụ Đo từ xa
report_ready_callback impl Fn(ReportInfo) + Send + Sync + 'static: Một bao đóng nhận và xử lý thông báo khi báo cáo chỉ số mới đã sẵn sàng để truy xuất
Giá trị trả về
TelemetryResult<()> Kết quả trống khi thành công hoặc thực thể TelemetryError khi không thành công

hoàn tất

pub fn finish(&self) -> TelemetryResult<()>

Tắt kết nối dịch vụ một cách thích hợp, xoá các trình nghe đã đăng ký và dọn dẹp các tài nguyên được liên kết. Gọi phương thức này một lần khi ứng dụng kết thúc.

Giá trị trả về
TelemetryResult<()> Kết quả trống khi thành công hoặc thực thể TelemetryError khi không thành công

Quản lý cấu hình chỉ số

Các phương thức không đồng bộ này quản lý định nghĩa và trạng thái của các cấu hình thu thập dữ liệu.

Dịch vụ đo từ xa duy trì cấu hình ở hai trạng thái:

  • Không hoạt động: Cấu hình được xác thực và lưu trữ trên ổ đĩa nhưng không được dùng để thu thập dữ liệu.
  • Đang hoạt động: Cấu hình này thu thập dữ liệu và các thành phần của cấu hình (ví dụ: trình kích hoạt, nhà xuất bản) đang hoạt động.

Để đảm bảo các cấu hình vẫn được giữ nguyên trong các lần khởi động lại dịch vụ và khởi động lại thiết bị, dịch vụ sẽ lưu trữ các cấu hình đó trên ổ đĩa của thiết bị. Dịch vụ này lưu trữ tất cả các cấu hình trong 2 thư mục dựa trên trạng thái, xác thực và kích hoạt các cấu hình đó khi khởi động (nếu cần).

add_metrics_config

pub async fn add_metrics_config(&self, serialized_config: &[u8]) -> TelemetryResult<String>

Thêm một cấu hình chỉ số mới vào dịch vụ. Bạn phải cung cấp cấu hình dưới dạng một mảng byte được chuyển đổi tuần tự. Theo mặc định, cấu hình được thêm sẽ không hoạt động.

Tham số
serialized_config &[u8]: Một lát byte chứa dữ liệu cấu hình được tuần tự hoá protobuf
Giá trị trả về
TelemetryResult<String> Một kết quả chứa UUID của cấu hình mới được thêm khi thành công hoặc phiên bản TelemetryError khi thất bại

activate_metrics_config

pub async fn activate_metrics_config(&self, config_uuid: &str) -> TelemetryResult<String>

Kích hoạt một cấu hình chỉ số đã được thêm (hoặc huỷ kích hoạt) trước đó, bắt đầu thu thập dữ liệu và báo cáo.

Tham số
config_uuid &str: UUID của cấu hình cần kích hoạt
Giá trị trả về
TelemetryResult<String> Một kết quả chứa UUID của cấu hình đã kích hoạt khi thành công hoặc phiên bản TelemetryError khi thất bại

deactivate_metrics_config

pub async fn deactivate_metrics_config(&self, config_uuid: &str) -> TelemetryResult<String>

Ngừng thu thập dữ liệu và báo cáo cho một cấu hình chỉ số đang hoạt động. Cấu hình vẫn nằm trong dịch vụ và có thể được kích hoạt lại sau.

Tham số
config_uuid &str: UUID của cấu hình cần huỷ kích hoạt
Giá trị trả về
TelemetryResult<String> Một kết quả chứa UUID của cấu hình đã huỷ kích hoạt khi thành công hoặc phiên bản TelemetryError khi thất bại

remove_metrics_config

pub async fn remove_metrics_config(&self, config_uuid: &str) -> TelemetryResult<String>

Xoá vĩnh viễn một cấu hình chỉ số. Nếu cấu hình đang hoạt động, dịch vụ sẽ huỷ kích hoạt cấu hình đó trước.

Tham số
config_uuid &str: UUID của cấu hình cần xoá
Giá trị trả về
TelemetryResult<String> Một kết quả chứa UUID của cấu hình đã xoá khi thành công hoặc thực thể TelemetryError khi thất bại

remove_all_metrics_configs

pub async fn remove_all_metrics_configs(&self) -> TelemetryResult<String>

Xoá tất cả cấu hình chỉ số hiện có, huỷ kích hoạt mọi cấu hình đang hoạt động.

Giá trị trả về
TelemetryResult<String> Một kết quả chứa chuỗi thông báo trạng thái khi thành công hoặc phiên bản TelemetryError khi thất bại

get_active_metrics_config_uuids

pub async fn get_active_metrics_config_uuids(&self) -> TelemetryResult<Vec<String>>

Truy vấn dịch vụ để lấy danh sách UUID cho tất cả các cấu hình ở trạng thái đang hoạt động.

Giá trị trả về
TelemetryResult<Vec<String>> Một kết quả chứa vectơ gồm các chuỗi UUID cho cấu hình chỉ số đang hoạt động khi thành công hoặc phiên bản TelemetryError khi thất bại

get_inactive_metrics_config_uuids

pub async fn get_inactive_metrics_config_uuids(&self) -> TelemetryResult<Vec<String>>

Truy vấn dịch vụ để lấy danh sách UUID cho tất cả cấu hình ở trạng thái không hoạt động.

Giá trị trả về
TelemetryResult<Vec<String>> Một kết quả chứa vectơ gồm các chuỗi UUID cho cấu hình chỉ số không hoạt động khi thành công hoặc phiên bản TelemetryError khi không thành công

Xử lý và truy xuất báo cáo chỉ số

Các phương thức này cho phép bạn truy vấn các báo cáo hiện có và truy xuất dữ liệu báo cáo đã thu thập.

get_metrics_report

pub async fn get_metrics_report(&self, report_uuid: &str) -> TelemetryResult<MetricsReport>

Truy xuất dữ liệu báo cáo đầy đủ về chỉ số cho một UUID báo cáo cụ thể. Bạn có thể nhận UUID báo cáo từ một thông báo bằng cách sử dụng report_ready_callback hoặc bằng cách gọi get_ready_reports_info.

Tham số
report_uuid &str: UUID của báo cáo cụ thể cần truy xuất
Giá trị trả về
TelemetryResult<MetricsReport> Một kết quả chứa đối tượng protobuf MetricsReport được chuyển đổi tuần tự khi thành công hoặc phiên bản TelemetryError khi không thành công

get_ready_reports_info

pub async fn get_ready_reports_info(&self) -> TelemetryResult<Vec<ReportInfo>>

Truy vấn dịch vụ Đo từ xa để lấy danh sách tất cả các báo cáo đã hoàn tất và sẵn sàng truy xuất. Điều này hữu ích khi kiểm tra trạng thái của báo cáo nếu bạn bỏ lỡ thông báo gọi lại (ví dụ: nếu report_ready_callback được đăng ký muộn).

Giá trị trả về
TelemetryResult<Vec<ReportInfo>> Một kết quả chứa vectơ của các đối tượng ReportInfo khi thành công hoặc thực thể TelemetryError khi thất bại

Các loại nhân, lệnh gọi lại và xử lý lỗi

libsdv_telemetry_rust_wrapper sử dụng một nhóm các kiểu tuỳ chỉnh để tương tác với dịch vụ Đo từ xa, quản lý các lệnh gọi lại không đồng bộ và xử lý lỗi dịch vụ.

Các loại lỗi và phản hồi API

Các loại này được các phương thức của thư viện trả về trực tiếp để cho biết thao tác được yêu cầu có thành công hay không.

TelemetryResult

Hầu hết các phương thức đều trả về một TelemetryResult<T>, đây là một bí danh cho loại Result tiêu chuẩn, chuyên biệt cho các lỗi ở cấp dịch vụ:

pub type TelemetryResult<T> = Result<T, TelemetryError>;

TelemetryError

Cấu trúc TelemetryError bao bọc tất cả các lỗi và cung cấp thông tin chi tiết về lỗi dành riêng cho dịch vụ:

Trường
status TelemetryServiceStatusCodes: Mã lỗi có thể liệt kê
message String: Một thông báo mô tả chi tiết về lỗi

TelemetryServiceStatusCodes

Một chế độ liệt kê bằng số thể hiện kết quả của các lệnh gọi API và trạng thái dịch vụ nội bộ. Các mã này được dùng trong cả TelemetryErrorTelemetryServiceStatus. Ví dụ:

200 TELEMETRY_SERVICE_API_CALL_SUCCESS Thành công
402 METRICS_CONFIG_PARSE_ERROR Không phân tích cú pháp được cấu hình chỉ số
407 REMOVE_METRICS_CONFIG_FAILED Không xoá được cấu hình chỉ số
417 METRICS_CONFIG_RUNTIME_EXPRESSION_NODE_EVALUATION_ERROR Không đánh giá được biểu thức được chỉ định trong cấu hình chỉ số

Các loại lệnh gọi lại không đồng bộ

Các trình nghe đã đăng ký (misc_status_callbackreport_ready_callback) sẽ truyền các loại này đến ứng dụng để cung cấp thông tin cập nhật về các quy trình ở chế độ nền.

TelemetryServiceStatus

Cấu trúc TelemetryServiceStatus đóng vai trò là đối số cho phương thức đóng misc_status_callback của init, được đăng ký trong quá trình khởi chạy dịch vụ. Nó cung cấp thông tin cập nhật không đồng bộ về tình trạng của dịch vụ và các vấn đề về thời gian chạy, chẳng hạn như ngắt kết nối với một nguồn dữ liệu.

Trường
id usize: Giá trị nhận dạng duy nhất cho sự kiện trạng thái
code TelemetryServiceStatusCodes: Mã trạng thái phân loại sự kiện
message String: Nội dung mô tả trạng thái mà con người có thể đọc được
details Option<StatusDetails>: Dữ liệu có cấu trúc không bắt buộc cung cấp thêm ngữ cảnh về trạng thái

StatusDetails

Liệt kê này bao bọc các ngữ cảnh lỗi cụ thể. Nếu details xuất hiện trong TelemetryServiceStatus, thì đó là một trong các biến thể sau:

Biến thể
AggregationPublisherErrorDetails Đã xảy ra lỗi trong khi tổng hợp dữ liệu
ServicePublisherErrorDetails Đã xảy ra lỗi khi cố gắng kết nối với một dịch vụ
ConditionalTriggerErrorDetails Đã xảy ra lỗi trong khi đánh giá biểu thức của điều kiện kích hoạt có điều kiện
MetricsReportGeneratorErrorDetails Đã xảy ra lỗi khi tạo báo cáo chỉ số
ServiceErrorDetails Đã xảy ra lỗi khi nhận được tin nhắn mới từ một dịch vụ
FileIOErrorDetails Đã xảy ra lỗi I/O tệp

Mỗi biến thể enum chứa các trường bổ sung cung cấp thêm nhiều bối cảnh.

ReportInfo

Cấu trúc ReportInfo đóng vai trò là đối số cho đóng report_ready_callback của init. Cấu trúc này được đăng ký trong quá trình khởi tạo dịch vụ. Nội dung này chứa các giá trị nhận dạng mô tả một báo cáo chỉ số:

Trường
config_uuid String: UUID của cấu hình chỉ số đã tạo báo cáo
report_uuid String: UUID của báo cáo chỉ số đã sẵn sàng để truy xuất

Trường report_uuid là trường duy nhất cần thiết để truy xuất thêm báo cáo chỉ số (xem get_metrics_report), trong khi config_uuid chỉ đóng vai trò là thông tin bổ sung về nguồn của báo cáo.