@@ -260,12 +260,13 @@ export default function ChartContainer({
260260 return results ;
261261 } ;
262262
263- metrics . forEach ( metric => {
263+ metrics . forEach ( ( metric , idx ) => {
264+ const fileMetric = file . config ?. metrics ?. [ idx ] || metric ;
264265 let points = [ ] ;
265- if ( metric . mode === 'keyword' ) {
266- points = extractByKeyword ( lines , metric . keyword ) ;
267- } else if ( metric . regex ) {
268- const reg = new RegExp ( metric . regex ) ;
266+ if ( fileMetric . mode === 'keyword' ) {
267+ points = extractByKeyword ( lines , fileMetric . keyword ) ;
268+ } else if ( fileMetric . regex ) {
269+ const reg = new RegExp ( fileMetric . regex ) ;
269270 lines . forEach ( line => {
270271 reg . lastIndex = 0 ;
271272 const m = reg . exec ( line ) ;
@@ -278,7 +279,20 @@ export default function ChartContainer({
278279 }
279280 } ) ;
280281 }
281- metricsData [ metric . name || metric . keyword ] = points ;
282+
283+ let key = '' ;
284+ if ( metric . name && metric . name . trim ( ) ) {
285+ key = metric . name . trim ( ) ;
286+ } else if ( metric . keyword ) {
287+ key = metric . keyword . replace ( / [: : ] / g, '' ) . trim ( ) ;
288+ } else if ( metric . regex ) {
289+ const sanitized = metric . regex . replace ( / [ ^ a - z A - Z 0 - 9 _ ] / g, '' ) . trim ( ) ;
290+ key = sanitized || `metric${ idx + 1 } ` ;
291+ } else {
292+ key = `metric${ idx + 1 } ` ;
293+ }
294+
295+ metricsData [ key ] = points ;
282296 } ) ;
283297
284298 const range = file . config ?. dataRange ;
0 commit comments