hbs_acc_sys/
lib.rs

1#![allow(non_camel_case_types)]
2
3extern crate libc;
4extern crate hbs_common_sys;
5
6use libc::{uint64_t, c_double, c_int};
7use hbs_common_sys::{heartbeat_udata, heartbeat_rates, heartbeat_window_state};
8
9/// Typedef for the window completion callback function.
10pub type heartbeat_acc_window_complete = extern fn(*const heartbeat_acc_context);
11
12/// A heartbeat record with current rates (performance and accuracy).
13#[repr(C)]
14pub struct heartbeat_acc_record {
15    pub id: uint64_t,
16    pub user_tag: uint64_t,
17
18    pub work: uint64_t,
19    pub wd: heartbeat_udata,
20    pub start_time: uint64_t,
21    pub end_time: uint64_t,
22    pub td: heartbeat_udata,
23    pub perf: heartbeat_rates,
24
25    pub accuracy: uint64_t,
26    pub ad: heartbeat_udata,
27    pub acc: heartbeat_rates,
28}
29
30/// A `heartbeat_acc_context` is used for tracking performance/accuracy of recurring jobs.
31#[repr(C)]
32pub struct heartbeat_acc_context {
33    pub ws: heartbeat_window_state,
34    pub window_buffer: *mut heartbeat_acc_record,
35    pub counter: uint64_t,
36    pub lock: c_int,
37    pub hwc_callback: heartbeat_acc_window_complete,
38
39    pub td: heartbeat_udata,
40    pub wd: heartbeat_udata,
41    pub ad: heartbeat_udata,
42}
43
44extern "C" {
45    // Core functions
46
47    pub fn heartbeat_acc_init(hb: *mut heartbeat_acc_context,
48                              window_size: uint64_t,
49                              window_buffer: *mut heartbeat_acc_record,
50                              log_fd: c_int,
51                              hwc_callback: Option<heartbeat_acc_window_complete>) -> c_int;
52
53    pub fn heartbeat_acc(hb: *mut heartbeat_acc_context,
54                         user_tag: uint64_t,
55                         work: uint64_t,
56                         start_time: uint64_t,
57                         end_time: uint64_t,
58                         accuracy: uint64_t);
59
60    pub fn hb_acc_log_header(fd: c_int) -> c_int;
61
62    pub fn hb_acc_log_window_buffer(hb: *const heartbeat_acc_context,
63                                    fd: c_int) -> c_int;
64
65    // Utility functions
66
67    pub fn hb_acc_get_window_size(hb: *const heartbeat_acc_context) -> uint64_t;
68    pub fn hb_acc_get_log_fd(hb: *const heartbeat_acc_context) -> c_int;
69
70    pub fn hb_acc_get_user_tag(hb: *const heartbeat_acc_context) -> uint64_t;
71
72    pub fn hb_acc_get_global_time(hb: *const heartbeat_acc_context) -> uint64_t;
73    pub fn hb_acc_get_window_time(hb: *const heartbeat_acc_context) -> uint64_t;
74    pub fn hb_acc_get_global_work(hb: *const heartbeat_acc_context) -> uint64_t;
75    pub fn hb_acc_get_window_work(hb: *const heartbeat_acc_context) -> uint64_t;
76
77    pub fn hb_acc_get_global_perf(hb: *const heartbeat_acc_context) -> c_double;
78    pub fn hb_acc_get_window_perf(hb: *const heartbeat_acc_context) -> c_double;
79    pub fn hb_acc_get_instant_perf(hb: *const heartbeat_acc_context) -> c_double;
80
81    pub fn hb_acc_get_global_accuracy(hb: *const heartbeat_acc_context) -> uint64_t;
82    pub fn hb_acc_get_window_accuracy(hb: *const heartbeat_acc_context) -> uint64_t;
83
84    pub fn hb_acc_get_global_accuracy_rate(hb: *const heartbeat_acc_context) -> c_double;
85    pub fn hb_acc_get_window_accuracy_rate(hb: *const heartbeat_acc_context) -> c_double;
86    pub fn hb_acc_get_instant_accuracy_rate(hb: *const heartbeat_acc_context) -> c_double;
87}