flowparser-sflow 0.3.0

Parser for sFlow v5 datagrams
Documentation
use nom::IResult;
use nom::number::complete::{be_u32, be_u64};
use serde::{Deserialize, Serialize};

#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct MemcacheCounters {
    pub cmd_set: u32,
    pub cmd_touch: u32,
    pub cmd_flush: u32,
    pub get_hits: u32,
    pub get_misses: u32,
    pub delete_hits: u32,
    pub delete_misses: u32,
    pub incr_hits: u32,
    pub incr_misses: u32,
    pub decr_hits: u32,
    pub decr_misses: u32,
    pub cas_hits: u32,
    pub cas_misses: u32,
    pub cas_badval: u32,
    pub auth_cmds: u32,
    pub auth_errors: u32,
    pub threads: u32,
    pub conn_yields: u32,
    pub listen_disabled_num: u32,
    pub curr_connections: u32,
    pub rejected_connections: u32,
    pub total_connections: u32,
    pub connection_structures: u32,
    pub evictions: u32,
    pub reclaimed: u32,
    pub curr_items: u32,
    pub total_items: u32,
    pub bytes_read: u64,
    pub bytes_written: u64,
    pub bytes: u64,
    pub limit_maxbytes: u64,
}

pub(crate) fn parse_memcache_counters(input: &[u8]) -> IResult<&[u8], MemcacheCounters> {
    let (input, cmd_set) = be_u32(input)?;
    let (input, cmd_touch) = be_u32(input)?;
    let (input, cmd_flush) = be_u32(input)?;
    let (input, get_hits) = be_u32(input)?;
    let (input, get_misses) = be_u32(input)?;
    let (input, delete_hits) = be_u32(input)?;
    let (input, delete_misses) = be_u32(input)?;
    let (input, incr_hits) = be_u32(input)?;
    let (input, incr_misses) = be_u32(input)?;
    let (input, decr_hits) = be_u32(input)?;
    let (input, decr_misses) = be_u32(input)?;
    let (input, cas_hits) = be_u32(input)?;
    let (input, cas_misses) = be_u32(input)?;
    let (input, cas_badval) = be_u32(input)?;
    let (input, auth_cmds) = be_u32(input)?;
    let (input, auth_errors) = be_u32(input)?;
    let (input, threads) = be_u32(input)?;
    let (input, conn_yields) = be_u32(input)?;
    let (input, listen_disabled_num) = be_u32(input)?;
    let (input, curr_connections) = be_u32(input)?;
    let (input, rejected_connections) = be_u32(input)?;
    let (input, total_connections) = be_u32(input)?;
    let (input, connection_structures) = be_u32(input)?;
    let (input, evictions) = be_u32(input)?;
    let (input, reclaimed) = be_u32(input)?;
    let (input, curr_items) = be_u32(input)?;
    let (input, total_items) = be_u32(input)?;
    let (input, bytes_read) = be_u64(input)?;
    let (input, bytes_written) = be_u64(input)?;
    let (input, bytes) = be_u64(input)?;
    let (input, limit_maxbytes) = be_u64(input)?;

    Ok((
        input,
        MemcacheCounters {
            cmd_set,
            cmd_touch,
            cmd_flush,
            get_hits,
            get_misses,
            delete_hits,
            delete_misses,
            incr_hits,
            incr_misses,
            decr_hits,
            decr_misses,
            cas_hits,
            cas_misses,
            cas_badval,
            auth_cmds,
            auth_errors,
            threads,
            conn_yields,
            listen_disabled_num,
            curr_connections,
            rejected_connections,
            total_connections,
            connection_structures,
            evictions,
            reclaimed,
            curr_items,
            total_items,
            bytes_read,
            bytes_written,
            bytes,
            limit_maxbytes,
        },
    ))
}