From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: <yew-devel-bounces@lists.proxmox.com> Received: from firstgate.proxmox.com (firstgate.proxmox.com [212.224.123.68]) by lore.proxmox.com (Postfix) with ESMTPS id A68AC1FF1CD for <inbox@lore.proxmox.com>; Fri, 30 May 2025 14:22:20 +0200 (CEST) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id A62F02E7D5; Fri, 30 May 2025 14:22:36 +0200 (CEST) From: Dominik Csapak <d.csapak@proxmox.com> To: yew-devel@lists.proxmox.com Date: Fri, 30 May 2025 14:21:46 +0200 Message-Id: <20250530122202.2779300-5-d.csapak@proxmox.com> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20250530122202.2779300-1-d.csapak@proxmox.com> References: <20250530122202.2779300-1-d.csapak@proxmox.com> MIME-Version: 1.0 X-SPAM-LEVEL: Spam detection results: 0 AWL 0.022 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DMARC_MISSING 0.1 Missing DMARC policy KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_PASS -0.001 SPF: sender matches SPF record Subject: [yew-devel] [PATCH yew-comp 04/20] rrd: move unit calculation to own module X-BeenThere: yew-devel@lists.proxmox.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Yew framework devel list at Proxmox <yew-devel.lists.proxmox.com> List-Unsubscribe: <https://lists.proxmox.com/cgi-bin/mailman/options/yew-devel>, <mailto:yew-devel-request@lists.proxmox.com?subject=unsubscribe> List-Archive: <http://lists.proxmox.com/pipermail/yew-devel/> List-Post: <mailto:yew-devel@lists.proxmox.com> List-Help: <mailto:yew-devel-request@lists.proxmox.com?subject=help> List-Subscribe: <https://lists.proxmox.com/cgi-bin/mailman/listinfo/yew-devel>, <mailto:yew-devel-request@lists.proxmox.com?subject=subscribe> Reply-To: Yew framework devel list at Proxmox <yew-devel@lists.proxmox.com> Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: yew-devel-bounces@lists.proxmox.com Sender: "yew-devel" <yew-devel-bounces@lists.proxmox.com> makes it easier to test and makes the main rrd graph part smaller Signed-off-by: Dominik Csapak <d.csapak@proxmox.com> --- src/rrd/graph.rs | 96 +----------------------------------------------- src/rrd/mod.rs | 2 + src/rrd/units.rs | 95 +++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 98 insertions(+), 95 deletions(-) create mode 100644 src/rrd/units.rs diff --git a/src/rrd/graph.rs b/src/rrd/graph.rs index bfa7d1e..8b31103 100644 --- a/src/rrd/graph.rs +++ b/src/rrd/graph.rs @@ -170,101 +170,7 @@ impl Default for LayoutProps { use pwt::widget::canvas::{Canvas, Circle, Group, Path, Rect, SvgLength, Text}; -fn get_grid_unit_base10(min: f64, max: f64) -> f64 { - let range = max - min; - - if range == 0.0 { - panic!("get_grid_unit_base10: got zero range - internal error"); - } - - let mut l = range.log10() as i32; - - while (range / 10.0_f64.powi(l)) < 2.0 { - l -= 1; - } - - let mut res = 10.0_f64.powi(l); - - let count = range / res; - - if count > 15.0 { - res *= 5.0; - } else if count > 10.0 { - res *= 2.0; - } - - res -} - -fn get_grid_unit_base2(min: f64, max: f64) -> f64 { - let range = max - min; - - if range == 0.0 { - panic!("get_grid_unit_base2: got zero range - internal error"); - } - - let mut l = range.log2() as i32; - - while (range / 2.0_f64.powi(l)) < 4.0 { - l -= 1; - } - - let mut res = 2.0_f64.powi(l); - - let count = range / res; - - if count > 15.0 { - res *= 2.0; - } - - res -} - -fn get_time_grid_unit(min: i64, max: i64) -> i64 { - let range = max - min; - - if range < 10 { - // should not happen - return 1; - } - - let units = [ - 3600 * 24, - 3600 * 12, - 3600 * 6, - 3600 * 4, - 3600 * 2, - 60 * 60, - 60 * 30, - 60 * 15, - 60 * 10, - 60 * 5, - 60 * 2, - 60, - 30, - 15, - 10, - 5, - 2, - 1, - ]; - - let mut l = *units.first().unwrap(); - for unit in units { - if (range / unit) > 5 { - l = unit; - break; - } - } - - while (l >= *units.first().unwrap()) && (range / l) > 10 { - l *= 2; - } - - //log::info!("TIMERANG {l}"); - - l -} +use super::units::{get_grid_unit_base10, get_grid_unit_base2, get_time_grid_unit}; fn format_date_time(t: i64) -> String { let (time, date) = format_time(t); diff --git a/src/rrd/mod.rs b/src/rrd/mod.rs index 87bc07f..7931053 100644 --- a/src/rrd/mod.rs +++ b/src/rrd/mod.rs @@ -1,2 +1,4 @@ mod graph; pub use graph::*; + +pub(crate) mod units; diff --git a/src/rrd/units.rs b/src/rrd/units.rs new file mode 100644 index 0000000..b29a238 --- /dev/null +++ b/src/rrd/units.rs @@ -0,0 +1,95 @@ +pub(crate) fn get_grid_unit_base10(min: f64, max: f64) -> f64 { + let range = max - min; + + if range == 0.0 { + panic!("get_grid_unit_base10: got zero range - internal error"); + } + + let mut l = range.log10() as i32; + + while (range / 10.0_f64.powi(l)) < 2.0 { + l -= 1; + } + + let mut res = 10.0_f64.powi(l); + + let count = range / res; + + if count > 15.0 { + res *= 5.0; + } else if count > 10.0 { + res *= 2.0; + } + + res +} + +pub(crate) fn get_grid_unit_base2(min: f64, max: f64) -> f64 { + let range = max - min; + + if range == 0.0 { + panic!("get_grid_unit_base2: got zero range - internal error"); + } + + let mut l = range.log2() as i32; + + while (range / 2.0_f64.powi(l)) < 4.0 { + l -= 1; + } + + let mut res = 2.0_f64.powi(l); + + let count = range / res; + + if count > 15.0 { + res *= 2.0; + } + + res +} + +pub(crate) fn get_time_grid_unit(min: i64, max: i64) -> i64 { + let range = max - min; + + if range < 10 { + // should not happen + return 1; + } + + let units = [ + 3600 * 24, + 3600 * 12, + 3600 * 6, + 3600 * 4, + 3600 * 2, + 60 * 60, + 60 * 30, + 60 * 15, + 60 * 10, + 60 * 5, + 60 * 2, + 60, + 30, + 15, + 10, + 5, + 2, + 1, + ]; + + let mut l = *units.first().unwrap(); + for unit in units { + if (range / unit) > 5 { + l = unit; + break; + } + } + + while (l >= *units.first().unwrap()) && (range / l) > 10 { + l *= 2; + } + + //log::info!("TIMERANG {l}"); + + l +} -- 2.39.5 _______________________________________________ yew-devel mailing list yew-devel@lists.proxmox.com https://lists.proxmox.com/cgi-bin/mailman/listinfo/yew-devel