diff options
author | Leon Yang (Containers) <lnyng@meta.com> | 2024-04-11 13:18:46 -0700 |
---|---|---|
committer | Facebook GitHub Bot <facebook-github-bot@users.noreply.github.com> | 2024-04-11 13:18:46 -0700 |
commit | f3d3d29d863a2a6e1478dfb6405df0e4eb7feab7 (patch) | |
tree | 75247161a7594ca2bbdebd518a5beecad83f80dc | |
parent | 053ee16f832f179297e43b0a56011418c69abff8 (diff) |
[below[ Add below_derive::queriable_derives
Summary: Added a short hand proc macro to add #[derive] for necessary trait derives for Queriable structs. Unify the model's derives.
Reviewed By: boyuni
Differential Revision: D55968832
fbshipit-source-id: 0f27566687584b53d4d54b02102eae0038906481
-rw-r--r-- | below/below_derive/src/lib.rs | 27 | ||||
-rw-r--r-- | below/below_derive/src/queriable.rs | 15 | ||||
-rw-r--r-- | below/model/src/cgroup.rs | 82 | ||||
-rw-r--r-- | below/model/src/lib.rs | 2 | ||||
-rw-r--r-- | below/model/src/network.rs | 20 | ||||
-rw-r--r-- | below/model/src/process.rs | 10 | ||||
-rw-r--r-- | below/model/src/resctrl.rs | 10 | ||||
-rw-r--r-- | below/model/src/system.rs | 80 |
8 files changed, 80 insertions, 166 deletions
diff --git a/below/below_derive/src/lib.rs b/below/below_derive/src/lib.rs index 6c7c1a81..d68b7ee7 100644 --- a/below/below_derive/src/lib.rs +++ b/below/below_derive/src/lib.rs @@ -117,3 +117,30 @@ pub fn queriable_derive(input: TokenStream) -> TokenStream { .unwrap_or_else(|err| err.to_compile_error()) .into() } + +/// Shorthand to add #[derive] for all traits necessary for a Queriable model. +/// Example: +/// +/// #[below_derive::queriable_derives] +/// struct Foo { +/// ... +/// } +/// +/// Generates: +/// +/// #[derive( +/// Clone, +/// Debug, +/// Default, +/// PartialEq, +/// Serialize, +/// Deserialize, +/// ::below_derive::Queriable, +/// )] +/// struct Foo { +/// ... +/// } +#[proc_macro_attribute] +pub fn queriable_derives(_: TokenStream, input: TokenStream) -> TokenStream { + queriable::queriable_derives_impl(input.into()).into() +} diff --git a/below/below_derive/src/queriable.rs b/below/below_derive/src/queriable.rs index c1c2d91d..c66bdcdb 100644 --- a/below/below_derive/src/queriable.rs +++ b/below/below_derive/src/queriable.rs @@ -192,6 +192,21 @@ fn get_queriable_field_props(field: &Field) -> syn::Result<QueriableFieldProps> }) } +pub fn queriable_derives_impl(input: TokenStream) -> TokenStream { + quote! { + #[derive( + Clone, + Debug, + Default, + PartialEq, + Serialize, + Deserialize, + ::below_derive::Queriable, + )] + #input + } +} + pub fn queriable_derive_impl(ast: &DeriveInput) -> syn::Result<TokenStream> { let struct_props = get_queriable_struct_props(ast)?; let input_ident = struct_props.ident; diff --git a/below/model/src/cgroup.rs b/below/model/src/cgroup.rs index c0e9aeed..1c42e537 100644 --- a/below/model/src/cgroup.rs +++ b/below/model/src/cgroup.rs @@ -16,7 +16,7 @@ use super::*; /// Collection of all data local to the cgroup, e.g. its memory/io/cpu/pids usage. /// Nothing about child cgroups or siblings, and therefore "Single" in its name. -#[derive(Clone, Debug, Default, Serialize, Deserialize, below_derive::Queriable)] +#[::below_derive::queriable_derives] pub struct SingleCgroupModel { pub name: String, pub full_path: String, @@ -323,15 +323,7 @@ impl Nameable for SingleCgroupModel { } } -#[derive( - Clone, - Debug, - Default, - PartialEq, - Serialize, - Deserialize, - below_derive::Queriable -)] +#[::below_derive::queriable_derives] pub struct CgroupCpuModel { pub usage_pct: Option<f64>, pub user_pct: Option<f64>, @@ -358,15 +350,7 @@ impl CgroupCpuModel { } } -#[derive( - Clone, - Debug, - Default, - PartialEq, - Serialize, - Deserialize, - below_derive::Queriable -)] +#[::below_derive::queriable_derives] pub struct CgroupStatModel { pub nr_descendants: Option<u32>, pub nr_dying_descendants: Option<u32>, @@ -381,15 +365,7 @@ impl CgroupStatModel { } } -#[derive( - Clone, - Debug, - Default, - PartialEq, - Serialize, - Deserialize, - below_derive::Queriable -)] +#[::below_derive::queriable_derives] pub struct CgroupIoModel { pub rbytes_per_sec: Option<f64>, pub wbytes_per_sec: Option<f64>, @@ -463,15 +439,7 @@ impl std::ops::Add<&CgroupIoModel> for CgroupIoModel { } } -#[derive( - Clone, - Debug, - Default, - PartialEq, - Serialize, - Deserialize, - below_derive::Queriable -)] +#[::below_derive::queriable_derives] pub struct CgroupMemoryModel { pub total: Option<u64>, pub swap: Option<u64>, @@ -717,15 +685,7 @@ impl CgroupMemoryModel { } } -#[derive( - Clone, - Debug, - Default, - PartialEq, - Serialize, - Deserialize, - below_derive::Queriable -)] +#[::below_derive::queriable_derives] pub struct CgroupPidsModel { pub tids_current: Option<u64>, } @@ -747,15 +707,7 @@ impl CgroupPidsModel { } } -#[derive( - Clone, - Debug, - Default, - PartialEq, - Serialize, - Deserialize, - below_derive::Queriable -)] +#[::below_derive::queriable_derives] pub struct CgroupPressureModel { pub cpu_some_pct: Option<f64>, pub cpu_full_pct: Option<f64>, @@ -780,15 +732,7 @@ impl CgroupPressureModel { } } } -#[derive( - Clone, - Debug, - Default, - PartialEq, - Serialize, - Deserialize, - below_derive::Queriable -)] +#[::below_derive::queriable_derives] pub struct CgroupMemoryNumaModel { pub total: Option<u64>, pub anon: Option<u64>, @@ -900,15 +844,7 @@ impl CgroupMemoryNumaModel { /// Cgroup properties. Without any cgroup configuration changes, these should /// typically be static. -#[derive( - Clone, - Debug, - Default, - PartialEq, - Serialize, - Deserialize, - below_derive::Queriable -)] +#[::below_derive::queriable_derives] pub struct CgroupProperties { pub cgroup_controllers: Option<BTreeSet<String>>, pub cgroup_subtree_control: Option<BTreeSet<String>>, diff --git a/below/model/src/lib.rs b/below/model/src/lib.rs index 001fe49c..36174868 100644 --- a/below/model/src/lib.rs +++ b/below/model/src/lib.rs @@ -637,7 +637,7 @@ mod tests { get_sample_model(); } - #[derive(Clone, Default, Debug, below_derive::Queriable)] + #[::below_derive::queriable_derives] pub struct TestModel { pub msg: String, } diff --git a/below/model/src/network.rs b/below/model/src/network.rs index 782bcb00..751858f3 100644 --- a/below/model/src/network.rs +++ b/below/model/src/network.rs @@ -14,7 +14,7 @@ use super::*; -#[derive(Default, Serialize, Deserialize, below_derive::Queriable)] +#[::below_derive::queriable_derives] pub struct NetworkModel { #[queriable(subquery)] pub interfaces: BTreeMap<String, SingleNetModel>, @@ -155,7 +155,7 @@ impl Nameable for NetworkModel { } } -#[derive(Default, Serialize, Deserialize, below_derive::Queriable)] +#[::below_derive::queriable_derives] pub struct TcpModel { pub active_opens_per_sec: Option<u64>, pub passive_opens_per_sec: Option<u64>, @@ -192,7 +192,7 @@ impl TcpModel { } } -#[derive(Default, Serialize, Deserialize, below_derive::Queriable)] +#[::below_derive::queriable_derives] pub struct IpModel { pub forwarding_pkts_per_sec: Option<u64>, pub in_receives_pkts_per_sec: Option<u64>, @@ -248,7 +248,7 @@ impl IpModel { } } -#[derive(Default, Serialize, Deserialize, below_derive::Queriable)] +#[::below_derive::queriable_derives] pub struct Ip6Model { pub in_receives_pkts_per_sec: Option<u64>, pub in_hdr_errors: Option<u64>, @@ -293,7 +293,7 @@ impl Ip6Model { } } -#[derive(Default, Serialize, Deserialize, below_derive::Queriable)] +#[::below_derive::queriable_derives] pub struct IcmpModel { pub in_msgs_per_sec: Option<u64>, pub in_errors: Option<u64>, @@ -319,7 +319,7 @@ impl IcmpModel { } } -#[derive(Default, Serialize, Deserialize, below_derive::Queriable)] +#[::below_derive::queriable_derives] pub struct Icmp6Model { pub in_msgs_per_sec: Option<u64>, pub in_errors: Option<u64>, @@ -345,7 +345,7 @@ impl Icmp6Model { } } -#[derive(Default, Serialize, Deserialize, below_derive::Queriable)] +#[::below_derive::queriable_derives] pub struct UdpModel { pub in_datagrams_pkts_per_sec: Option<u64>, pub no_ports: Option<u64>, @@ -370,7 +370,7 @@ impl UdpModel { } } -#[derive(Default, Serialize, Deserialize, below_derive::Queriable)] +#[::below_derive::queriable_derives] pub struct Udp6Model { pub in_datagrams_pkts_per_sec: Option<u64>, pub no_ports: Option<u64>, @@ -400,7 +400,7 @@ impl Udp6Model { } } -#[derive(Default, Serialize, Deserialize, below_derive::Queriable)] +#[::below_derive::queriable_derives] pub struct SingleNetModel { pub interface: String, pub rx_bytes_per_sec: Option<f64>, @@ -570,7 +570,7 @@ impl Nameable for SingleNetModel { } } -#[derive(Clone, Default, Serialize, Deserialize, below_derive::Queriable)] +#[::below_derive::queriable_derives] pub struct SingleQueueModel { pub interface: String, pub queue_id: u32, diff --git a/below/model/src/process.rs b/below/model/src/process.rs index 4341a360..1b7c1441 100644 --- a/below/model/src/process.rs +++ b/below/model/src/process.rs @@ -30,7 +30,7 @@ macro_rules! fold_optionals { }; } -#[derive(Default, Serialize, Deserialize, below_derive::Queriable)] +#[::below_derive::queriable_derives] pub struct ProcessModel { #[queriable(subquery)] pub processes: BTreeMap<i32, SingleProcessModel>, @@ -60,7 +60,7 @@ impl Nameable for ProcessModel { } } -#[derive(Default, Clone, Serialize, Deserialize, below_derive::Queriable)] +#[::below_derive::queriable_derives] pub struct SingleProcessModel { pub pid: Option<i32>, pub ppid: Option<i32>, @@ -136,7 +136,7 @@ impl Nameable for SingleProcessModel { } } -#[derive(Clone, Default, Serialize, Deserialize, below_derive::Queriable)] +#[::below_derive::queriable_derives] pub struct ProcessIoModel { pub rbytes_per_sec: Option<f64>, pub wbytes_per_sec: Option<f64>, @@ -167,7 +167,7 @@ impl ProcessIoModel { } } -#[derive(Clone, Default, Serialize, Deserialize, below_derive::Queriable)] +#[::below_derive::queriable_derives] pub struct ProcessCpuModel { pub usage_pct: Option<f64>, pub user_pct: Option<f64>, @@ -199,7 +199,7 @@ impl ProcessCpuModel { } } -#[derive(Clone, Default, Serialize, Deserialize, below_derive::Queriable)] +#[::below_derive::queriable_derives] pub struct ProcessMemoryModel { pub minorfaults_per_sec: Option<f64>, pub majorfaults_per_sec: Option<f64>, diff --git a/below/model/src/resctrl.rs b/below/model/src/resctrl.rs index 4c14c06a..b8928669 100644 --- a/below/model/src/resctrl.rs +++ b/below/model/src/resctrl.rs @@ -14,7 +14,7 @@ use super::*; -#[derive(Clone, Debug, Default, Serialize, Deserialize, below_derive::Queriable)] +#[::below_derive::queriable_derives] pub struct ResctrlL3MonModel { pub llc_occupancy_bytes: Option<u64>, pub mbm_total_bytes_per_sec: Option<u64>, @@ -22,7 +22,7 @@ pub struct ResctrlL3MonModel { } /// Model for mon data -#[derive(Clone, Debug, Default, Serialize, Deserialize, below_derive::Queriable)] +#[::below_derive::queriable_derives] pub struct ResctrlMonModel { #[queriable(subquery)] pub total: ResctrlL3MonModel, @@ -31,7 +31,7 @@ pub struct ResctrlMonModel { } /// Collection of all data about a single MON group -#[derive(Clone, Debug, Default, Serialize, Deserialize, below_derive::Queriable)] +#[::below_derive::queriable_derives] pub struct ResctrlMonGroupModel { pub name: String, pub full_path: String, @@ -40,7 +40,7 @@ pub struct ResctrlMonGroupModel { } /// Collection of all data about a single CTRL_MON group and descendents -#[derive(Clone, Debug, Default, Serialize, Deserialize, below_derive::Queriable)] +#[::below_derive::queriable_derives] pub struct ResctrlCtrlMonGroupModel { pub name: String, pub full_path: String, @@ -53,7 +53,7 @@ pub struct ResctrlCtrlMonGroupModel { } /// All data about the entire resctrl filesystem -#[derive(Clone, Debug, Default, Serialize, Deserialize, below_derive::Queriable)] +#[::below_derive::queriable_derives] pub struct ResctrlModel { pub cpuset: Option<resctrlfs::Cpuset>, pub mode: Option<resctrlfs::GroupMode>, diff --git a/below/model/src/system.rs b/below/model/src/system.rs index 3cd25a32..4d783f9f 100644 --- a/below/model/src/system.rs +++ b/below/model/src/system.rs @@ -14,15 +14,7 @@ use super::*; -#[derive( - Clone, - Debug, - Default, - PartialEq, - Serialize, - Deserialize, - below_derive::Queriable -)] +#[::below_derive::queriable_derives] pub struct SystemModel { pub hostname: String, pub kernel_version: Option<String>, @@ -161,15 +153,7 @@ impl Nameable for SystemModel { } } -#[derive( - Clone, - Debug, - Default, - PartialEq, - Serialize, - Deserialize, - below_derive::Queriable -)] +#[::below_derive::queriable_derives] pub struct ProcStatModel { pub total_interrupt_ct: Option<u64>, pub context_switches: Option<u64>, @@ -192,15 +176,7 @@ impl ProcStatModel { } } -#[derive( - Clone, - Debug, - Default, - PartialEq, - Serialize, - Deserialize, - below_derive::Queriable -)] +#[::below_derive::queriable_derives] pub struct SingleCpuModel { pub idx: i32, pub usage_pct: Option<f64>, @@ -283,15 +259,7 @@ impl SingleCpuModel { } } -#[derive( - Clone, - Debug, - Default, - PartialEq, - Serialize, - Deserialize, - below_derive::Queriable -)] +#[::below_derive::queriable_derives] pub struct MemoryModel { pub total: Option<u64>, pub free: Option<u64>, @@ -376,15 +344,7 @@ impl MemoryModel { } } -#[derive( - Clone, - Debug, - Default, - PartialEq, - Serialize, - Deserialize, - below_derive::Queriable -)] +#[::below_derive::queriable_derives] pub struct VmModel { pub pgpgin_per_sec: Option<f64>, pub pgpgout_per_sec: Option<f64>, @@ -413,15 +373,7 @@ impl VmModel { } } -#[derive( - Clone, - Debug, - Default, - PartialEq, - Serialize, - Deserialize, - below_derive::Queriable -)] +#[::below_derive::queriable_derives] pub struct SingleSlabModel { pub name: Option<String>, pub active_objs: Option<u64>, @@ -456,15 +408,7 @@ impl SingleSlabModel { } } -#[derive( - Clone, - Debug, - Default, - PartialEq, - Serialize, - Deserialize, - below_derive::Queriable -)] +#[::below_derive::queriable_derives] pub struct SingleDiskModel { pub name: Option<String>, pub disk_usage: Option<f32>, @@ -544,15 +488,7 @@ impl Nameable for SingleDiskModel { } } -#[derive( - Clone, - Debug, - Default, - PartialEq, - Serialize, - Deserialize, - below_derive::Queriable -)] +#[::below_derive::queriable_derives] pub struct BtrfsModel { pub name: Option<String>, pub disk_fraction: Option<f64>, |