gauravlochab commited on
Commit
9428dec
·
1 Parent(s): 7d091ea

feat: update APR data filtering to exclude zero and -100 values, enhance graph handling for negative APR

Browse files
Files changed (1) hide show
  1. app.py +30 -31
app.py CHANGED
@@ -251,15 +251,15 @@ def fetch_apr_data_from_db():
251
  # Add is_dummy flag (all real data)
252
  apr_data["is_dummy"] = False
253
 
254
- # CHANGE: Only include positive APR values (greater than 0)
255
- if apr_data["apr"] > 0:
256
  apr_data["metric_type"] = "APR"
257
  logger.debug(f"Agent {agent_name} ({attr['agent_id']}): APR value: {apr_data['apr']}")
258
- # Add to the data list only if value is positive
259
  apr_data_list.append(apr_data)
260
  else:
261
- # Log that we're skipping non-positive values
262
- logger.debug(f"Skipping non-positive value for agent {agent_name} ({attr['agent_id']}): {apr_data['apr']}")
263
 
264
  # Convert list of dictionaries to DataFrame
265
  if not apr_data_list:
@@ -273,8 +273,8 @@ def fetch_apr_data_from_db():
273
  logger.info(f"Created DataFrame with {len(global_df)} rows")
274
  logger.info(f"DataFrame columns: {global_df.columns.tolist()}")
275
  logger.info(f"APR statistics: min={global_df['apr'].min()}, max={global_df['apr'].max()}, mean={global_df['apr'].mean()}")
276
- # After filtering, all values are APR type
277
- logger.info("All values are APR type (positive values only)")
278
  logger.info(f"Agents count: {global_df['agent_name'].value_counts().to_dict()}")
279
 
280
  # Log the entire dataframe for debugging
@@ -534,16 +534,15 @@ def create_combined_time_series_graph(df):
534
  unique_agents = df['agent_id'].unique()
535
  colors = px.colors.qualitative.Plotly[:len(unique_agents)]
536
 
537
- # IMPORTANT: Fixed y-axis range that always includes -100
538
- # Since we're only showing positive values, adjust the range
539
- min_apr = 0 # Start at 0
540
  max_apr = max(df['apr'].max() * 1.1, 10) # Add 10% padding, minimum of 10
541
 
542
  # Add background shapes for APR and Performance regions
543
  min_time = df['timestamp'].min()
544
  max_time = df['timestamp'].max()
545
 
546
- # Add shape for APR region (above zero)
547
  fig.add_shape(
548
  type="rect",
549
  fillcolor="rgba(230, 243, 255, 0.3)",
@@ -553,6 +552,16 @@ def create_combined_time_series_graph(df):
553
  layer="below"
554
  )
555
 
 
 
 
 
 
 
 
 
 
 
556
  # Add zero line
557
  fig.add_shape(
558
  type="line",
@@ -621,7 +630,7 @@ def create_combined_time_series_graph(df):
621
 
622
  # Update layout - use simple boolean values everywhere
623
  fig.update_layout(
624
- title="APR Values for All Agents (Positive Values Only)",
625
  xaxis_title="Time",
626
  yaxis_title="Value",
627
  template="plotly_white",
@@ -644,10 +653,10 @@ def create_combined_time_series_graph(df):
644
  showgrid=True,
645
  gridwidth=1,
646
  gridcolor='rgba(0,0,0,0.1)',
647
- range=[min_apr, max_apr], # Fixed range
648
  tickmode='linear',
649
  tick0=0,
650
- dtick=10 # Adjusted for positive values
651
  )
652
 
653
  # Update x-axis
@@ -714,10 +723,10 @@ def create_combined_time_series_graph(df):
714
 
715
  # Simplified layout
716
  simple_fig.update_layout(
717
- title="APR Values (Simplified View - Positive Values Only)",
718
  xaxis_title="Time",
719
  yaxis_title="Value",
720
- yaxis=dict(range=[0, max_apr]),
721
  height=600,
722
  width=1000
723
  )
@@ -1168,23 +1177,13 @@ def dashboard():
1168
 
1169
  # Set up the button click event with error handling
1170
  try:
1171
- # Try newer Gradio API first
1172
- refresh_btn.click(
1173
- fn=update_apr_graph,
1174
- inputs=None,
1175
- outputs=combined_graph
1176
- )
1177
- except TypeError:
1178
- # Fall back to original method
1179
- refresh_btn.click(
1180
- fn=update_apr_graph,
1181
- inputs=[],
1182
- outputs=[combined_graph]
1183
- )
1184
-
1185
  # Initialize the graph on load
1186
  # We'll use placeholder figure initially
1187
- import plotly.graph_objects as go
1188
  placeholder_fig = go.Figure()
1189
  placeholder_fig.add_annotation(
1190
  text="Click 'Refresh APR Data' to load APR graph",
 
251
  # Add is_dummy flag (all real data)
252
  apr_data["is_dummy"] = False
253
 
254
+ # Include all APR values (including negative ones) EXCEPT zero and -100
255
+ if apr_data["apr"] != 0 and apr_data["apr"] != -100:
256
  apr_data["metric_type"] = "APR"
257
  logger.debug(f"Agent {agent_name} ({attr['agent_id']}): APR value: {apr_data['apr']}")
258
+ # Add to the data list
259
  apr_data_list.append(apr_data)
260
  else:
261
+ # Log that we're skipping zero or -100 values
262
+ logger.debug(f"Skipping value for agent {agent_name} ({attr['agent_id']}): {apr_data['apr']} (zero or -100)")
263
 
264
  # Convert list of dictionaries to DataFrame
265
  if not apr_data_list:
 
273
  logger.info(f"Created DataFrame with {len(global_df)} rows")
274
  logger.info(f"DataFrame columns: {global_df.columns.tolist()}")
275
  logger.info(f"APR statistics: min={global_df['apr'].min()}, max={global_df['apr'].max()}, mean={global_df['apr'].mean()}")
276
+ # All values are APR type (excluding zero and -100 values)
277
+ logger.info("All values are APR type (excluding zero and -100 values)")
278
  logger.info(f"Agents count: {global_df['agent_name'].value_counts().to_dict()}")
279
 
280
  # Log the entire dataframe for debugging
 
534
  unique_agents = df['agent_id'].unique()
535
  colors = px.colors.qualitative.Plotly[:len(unique_agents)]
536
 
537
+ # Update y-axis range to include negative values
538
+ min_apr = min(df['apr'].min() * 1.1, -10) # Add 10% padding, minimum of -10
 
539
  max_apr = max(df['apr'].max() * 1.1, 10) # Add 10% padding, minimum of 10
540
 
541
  # Add background shapes for APR and Performance regions
542
  min_time = df['timestamp'].min()
543
  max_time = df['timestamp'].max()
544
 
545
+ # Add shape for positive APR region (above zero)
546
  fig.add_shape(
547
  type="rect",
548
  fillcolor="rgba(230, 243, 255, 0.3)",
 
552
  layer="below"
553
  )
554
 
555
+ # Add shape for negative APR region (below zero)
556
+ fig.add_shape(
557
+ type="rect",
558
+ fillcolor="rgba(255, 230, 230, 0.3)",
559
+ line=dict(width=0),
560
+ y0=min_apr, y1=0,
561
+ x0=min_time, x1=max_time,
562
+ layer="below"
563
+ )
564
+
565
  # Add zero line
566
  fig.add_shape(
567
  type="line",
 
630
 
631
  # Update layout - use simple boolean values everywhere
632
  fig.update_layout(
633
+ title="APR Values for All Agents",
634
  xaxis_title="Time",
635
  yaxis_title="Value",
636
  template="plotly_white",
 
653
  showgrid=True,
654
  gridwidth=1,
655
  gridcolor='rgba(0,0,0,0.1)',
656
+ range=[min_apr, max_apr], # Updated range including negative values
657
  tickmode='linear',
658
  tick0=0,
659
+ dtick=10
660
  )
661
 
662
  # Update x-axis
 
723
 
724
  # Simplified layout
725
  simple_fig.update_layout(
726
+ title="APR Values for All Agents",
727
  xaxis_title="Time",
728
  yaxis_title="Value",
729
+ yaxis=dict(range=[min_apr, max_apr]),
730
  height=600,
731
  width=1000
732
  )
 
1177
 
1178
  # Set up the button click event with error handling
1179
  try:
1180
+ # Use Gradio's button click properly
1181
+ refresh_btn.click(fn=update_apr_graph, outputs=combined_graph)
1182
+ except Exception as e:
1183
+ logger.error(f"Error setting up button handler: {e}")
1184
+
 
 
 
 
 
 
 
 
 
1185
  # Initialize the graph on load
1186
  # We'll use placeholder figure initially
 
1187
  placeholder_fig = go.Figure()
1188
  placeholder_fig.add_annotation(
1189
  text="Click 'Refresh APR Data' to load APR graph",