summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLeon Yang (Containers) <lnyng@meta.com>2024-04-11 13:18:46 -0700
committerFacebook GitHub Bot <facebook-github-bot@users.noreply.github.com>2024-04-11 13:18:46 -0700
commitf3d3d29d863a2a6e1478dfb6405df0e4eb7feab7 (patch)
tree75247161a7594ca2bbdebd518a5beecad83f80dc
parent053ee16f832f179297e43b0a56011418c69abff8 (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.rs27
-rw-r--r--below/below_derive/src/queriable.rs15
-rw-r--r--below/model/src/cgroup.rs82
-rw-r--r--below/model/src/lib.rs2
-rw-r--r--below/model/src/network.rs20
-rw-r--r--below/model/src/process.rs10
-rw-r--r--below/model/src/resctrl.rs10
-rw-r--r--below/model/src/system.rs80
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>,