@@ -1462,16 +1462,38 @@ impl Server {
1462
1462
async fn handle_metrics ( & self , _req : Request ) -> Response {
1463
1463
use prometheus:: Encoder ;
1464
1464
let data: Arc < InputData > = self . data . read ( ) . as_ref ( ) . unwrap ( ) . clone ( ) ;
1465
+ let idx = data. index . load ( ) ;
1465
1466
1466
1467
let mut buffer = Vec :: new ( ) ;
1467
1468
let r = prometheus:: Registry :: new ( ) ;
1468
1469
1469
1470
let queue_length =
1470
1471
prometheus:: IntGauge :: new ( "rustc_perf_queue_length" , "queue length" ) . unwrap ( ) ;
1471
1472
queue_length. set ( data. missing_commits ( ) . await . len ( ) as i64 ) ;
1472
-
1473
1473
r. register ( Box :: new ( queue_length) ) . unwrap ( ) ;
1474
1474
1475
+ if let Some ( last_commit) = idx. commits ( ) . last ( ) . cloned ( ) {
1476
+ let conn = data. conn ( ) . await ;
1477
+ let steps = conn. in_progress_steps ( & ArtifactId :: from ( last_commit) ) . await ;
1478
+ let g = prometheus:: IntGaugeVec :: new (
1479
+ prometheus:: core:: Opts {
1480
+ namespace : format ! ( "rustc_perf" ) ,
1481
+ subsystem : String :: new ( ) ,
1482
+ name : String :: from ( "step_duration_seconds" ) ,
1483
+ help : String :: from ( "step duration" ) ,
1484
+ const_labels : HashMap :: new ( ) ,
1485
+ variable_labels : vec ! [ ] ,
1486
+ } ,
1487
+ & [ "step" ] ,
1488
+ )
1489
+ . unwrap ( ) ;
1490
+ for step in steps {
1491
+ g. with_label_values ( & [ & step. name ] )
1492
+ . set ( step. expected . as_secs ( ) as i64 ) ;
1493
+ }
1494
+ r. register ( Box :: new ( g) ) . unwrap ( ) ;
1495
+ }
1496
+
1475
1497
let encoder = prometheus:: TextEncoder :: new ( ) ;
1476
1498
let metric_families = r. gather ( ) ;
1477
1499
encoder. encode ( & metric_families, & mut buffer) . unwrap ( ) ;
0 commit comments