Skip to main content

gl_client/
metrics.rs

1use prost::Message;
2
3const HSM_REQUEST_SIGNER_STATE_FIELD_NUMBER: u32 = 4;
4const HSM_RESPONSE_SIGNER_STATE_FIELD_NUMBER: u32 = 5;
5
6fn protobuf_varint_len(mut value: usize) -> usize {
7    let mut len = 1;
8    while value >= 0x80 {
9        value >>= 7;
10        len += 1;
11    }
12    len
13}
14
15fn signer_state_wire_bytes(entries: &[crate::pb::SignerStateEntry], field_number: u32) -> usize {
16    let field_key = ((field_number << 3) | 2) as usize; // wire type 2 = length-delimited
17    let field_key_len = protobuf_varint_len(field_key);
18    entries
19        .iter()
20        .map(|entry| {
21            let entry_len = entry.encoded_len();
22            field_key_len + protobuf_varint_len(entry_len) + entry_len
23        })
24        .sum()
25}
26
27pub fn signer_state_request_wire_bytes(entries: &[crate::pb::SignerStateEntry]) -> usize {
28    signer_state_wire_bytes(entries, HSM_REQUEST_SIGNER_STATE_FIELD_NUMBER)
29}
30
31pub fn signer_state_response_wire_bytes(entries: &[crate::pb::SignerStateEntry]) -> usize {
32    signer_state_wire_bytes(entries, HSM_RESPONSE_SIGNER_STATE_FIELD_NUMBER)
33}
34
35pub fn savings_percent(full_wire_bytes: usize, diff_wire_bytes: usize) -> usize {
36    if full_wire_bytes == 0 {
37        return 0;
38    }
39    full_wire_bytes
40        .saturating_sub(diff_wire_bytes)
41        .saturating_mul(100)
42        / full_wire_bytes
43}