Add rendering hint to snap y axis
This commit is contained in:
		
							parent
							
								
									9cc141e227
								
							
						
					
					
						commit
						badfae12e7
					
				| @ -21,6 +21,8 @@ pub struct GraphConfig { | ||||
|     pub kind: MetricKind, | ||||
|     #[serde(default)] | ||||
|     pub transform: Option<MetricTransform>, | ||||
|     #[serde(default)] | ||||
|     pub rendering: GraphRenderingHints, | ||||
| } | ||||
| 
 | ||||
| #[derive(Clone, Debug, Hash, Eq, PartialEq)] | ||||
| @ -29,3 +31,9 @@ pub struct GraphRequest { | ||||
|     pub metric_labels: BTreeMap<String, String>, | ||||
|     pub derivation: Option<MetricTransform>, | ||||
| } | ||||
| 
 | ||||
| #[derive(Clone, Debug, Default, Deserialize)] | ||||
| pub struct GraphRenderingHints { | ||||
|     /// The view will be forced to include this range.
 | ||||
|     pub include_y_range: Option<(f64, f64)>, | ||||
| } | ||||
|  | ||||
| @ -1,5 +1,5 @@ | ||||
| use crate::background_loader::MetricsLogReadingRequester; | ||||
| use crate::config::GraphRequest; | ||||
| use crate::config::{GraphRenderingHints, GraphRequest}; | ||||
| use bare_metrics_core::structures::UnixTimestampMilliseconds; | ||||
| use eframe::egui::{ | ||||
|     Color32, Frame as EguiFrame, PointerButton, Pos2, Rect, Sense, Stroke, TextStyle, Ui, Vec2, | ||||
| @ -64,7 +64,12 @@ impl Mul<(f64, f64)> for GraphTransform { | ||||
| } | ||||
| 
 | ||||
| impl Graph { | ||||
|     pub fn draw(ui: &mut Ui, graph_request: &GraphRequest, reader: &MetricsLogReadingRequester) { | ||||
|     pub fn draw( | ||||
|         ui: &mut Ui, | ||||
|         graph_request: &GraphRequest, | ||||
|         render_hint: &GraphRenderingHints, | ||||
|         reader: &MetricsLogReadingRequester, | ||||
|     ) { | ||||
|         let context_menu_id = ui.id().with("context menu"); | ||||
| 
 | ||||
|         EguiFrame::dark_canvas(ui.style()).show(ui, |ui| { | ||||
| @ -101,13 +106,25 @@ impl Graph { | ||||
| 
 | ||||
|             // This range is reversed because screen coordinates go down, but we'd like them to go
 | ||||
|             // up since this is more of a mathematical graph.
 | ||||
|             let y_axis = if let Some(histogram) = current_window.histograms.get(graph_request) { | ||||
|             let mut y_axis = if let Some(histogram) = current_window.histograms.get(graph_request) { | ||||
|                 histogram.y_axis.clone().into_inner() | ||||
|             } else if let Some(scalar) = current_window.scalars.get(graph_request) { | ||||
|                 scalar.y_axis.clone().into_inner() | ||||
|             } else { | ||||
|                 (0.0, 10.0) | ||||
|             }; | ||||
| 
 | ||||
|             if let Some((a, b)) = render_hint.include_y_range { | ||||
|                 // Force the y-axis to contain a range. Useful if you like 0 to be anchored on a
 | ||||
|                 // rate graph or something like that.
 | ||||
|                 if y_axis.0 > a { | ||||
|                     y_axis.0 = a; | ||||
|                 } | ||||
|                 if y_axis.1 < b { | ||||
|                     y_axis.1 = b; | ||||
|                 } | ||||
|             } | ||||
| 
 | ||||
|             let y_axis = (y_axis.1)..=(y_axis.0); | ||||
| 
 | ||||
|             // let display_transform =
 | ||||
|  | ||||
| @ -1,7 +1,7 @@ | ||||
| use crate::background_loader::{ | ||||
|     MetricsLogReaderMessage, MetricsLogReaderNotification, MetricsLogReadingRequester, | ||||
| }; | ||||
| use crate::config::{DashboardConfig, GraphRequest}; | ||||
| use crate::config::{DashboardConfig, GraphRenderingHints, GraphRequest}; | ||||
| use crate::graph::Graph; | ||||
| 
 | ||||
| use bare_metrics_reader::MetricsLogReader; | ||||
| @ -23,7 +23,8 @@ pub struct MetricsGui { | ||||
|     requester: MetricsLogReadingRequester, | ||||
| 
 | ||||
|     dashboard: Option<DashboardConfig>, | ||||
|     graph_requests: Vec<GraphRequest>, | ||||
|     // TODO we may want multiple graphs on the same pane, somehow.
 | ||||
|     graph_requests: Vec<(GraphRequest, GraphRenderingHints)>, | ||||
| } | ||||
| 
 | ||||
| impl App for MetricsGui { | ||||
| @ -39,13 +40,13 @@ impl App for MetricsGui { | ||||
|             egui::ScrollArea::new([false, true]).show(ui, |ui| { | ||||
|                 if let Some(_dashboard) = dashboard { | ||||
|                     let window = requester.shared.current_window.read().unwrap(); | ||||
|                     for graph in graph_requests.iter() { | ||||
|                         ui.label(&graph.metric_name); | ||||
|                     for (request, render_hint) in graph_requests.iter() { | ||||
|                         ui.label(&request.metric_name); | ||||
| 
 | ||||
|                         if window.scalars.contains_key(graph) | ||||
|                             || window.histograms.contains_key(graph) | ||||
|                         if window.scalars.contains_key(request) | ||||
|                             || window.histograms.contains_key(request) | ||||
|                         { | ||||
|                             Graph::draw(ui, graph, requester); | ||||
|                             Graph::draw(ui, request, render_hint, requester); | ||||
|                         } else { | ||||
|                             // TODO clarify
 | ||||
|                             ui.label("(loading or missing ...)"); | ||||
| @ -104,12 +105,15 @@ impl MetricsGui { | ||||
|         if let Some(dashboard) = self.dashboard.as_ref() { | ||||
|             for graph in dashboard.graphs.iter() { | ||||
|                 // TODO frankly we should maybe be using metric IDs in the graph requests
 | ||||
|                 self.graph_requests.push(GraphRequest { | ||||
|                     metric_name: graph.name.clone(), | ||||
|                     // TODO we need something better about the metric labels
 | ||||
|                     metric_labels: BTreeMap::new(), | ||||
|                     derivation: graph.transform.clone(), | ||||
|                 }); | ||||
|                 self.graph_requests.push(( | ||||
|                     GraphRequest { | ||||
|                         metric_name: graph.name.clone(), | ||||
|                         // TODO we need something better about the metric labels
 | ||||
|                         metric_labels: BTreeMap::new(), | ||||
|                         derivation: graph.transform.clone(), | ||||
|                     }, | ||||
|                     graph.rendering.clone(), | ||||
|                 )); | ||||
|             } | ||||
|         } else { | ||||
|             // TODO Build some stuff automatically based on alphabetical ordering
 | ||||
| @ -120,7 +124,12 @@ impl MetricsGui { | ||||
|             .send(MetricsLogReaderMessage::LoadNewWindow { | ||||
|                 new_time_range: f64::NEG_INFINITY..=f64::INFINITY, | ||||
|                 new_wanted_time_points: 512, | ||||
|                 requests: self.graph_requests.clone(), | ||||
|                 requests: self | ||||
|                     .graph_requests | ||||
|                     .iter() | ||||
|                     .map(|(a, _)| a) | ||||
|                     .cloned() | ||||
|                     .collect(), | ||||
|             }) | ||||
|             .unwrap(); | ||||
|     } | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user