1313
1414import { useMemo } from 'react' ;
1515
16+ import { Icon } from '@iconify/react' ;
1617import { AnimatePresence , motion } from 'framer-motion' ;
1718
18- import { DateTimeRange , MetricsGraphSkeleton , useParcaContext , TextWithTooltip } from '@parca/components' ;
19- import { formatDate , valueFormatter , timePattern } from '@parca/utilities' ;
20- import { Icon } from '@iconify/react' ;
19+ import {
20+ DateTimeRange ,
21+ MetricsGraphSkeleton ,
22+ TextWithTooltip ,
23+ useParcaContext ,
24+ } from '@parca/components' ;
25+ import { formatDate , timePattern , valueFormatter } from '@parca/utilities' ;
2126
2227import { type UtilizationMetrics as MetricSeries } from '../../ProfileSelector' ;
23- import MetricsGraph from '../index' ;
24- import { type Series , type ContextMenuItemOrSubmenu } from '../index' ;
28+ import MetricsGraph , { type ContextMenuItemOrSubmenu , type Series } from '../index' ;
2529import { useMetricsGraphDimensions } from '../useMetricsGraphDimensions' ;
2630
2731interface NetworkLabel {
@@ -82,13 +86,17 @@ const createThroughputContextMenuItems = (
8286 label : 'Focus only on this series' ,
8387 icon : 'ph:star' ,
8488 onClick : ( closestPoint , _series ) => {
85- if ( closestPoint != null && allData . length > 0 && allData [ closestPoint . seriesIndex ] != null ) {
89+ if (
90+ closestPoint != null &&
91+ allData . length > 0 &&
92+ allData [ closestPoint . seriesIndex ] != null
93+ ) {
8694 const originalSeriesData = allData [ closestPoint . seriesIndex ] ;
8795 if ( originalSeriesData . labelset ?. labels != null ) {
8896 const labels = originalSeriesData . labelset . labels . filter (
89- ( label ) => label . name !== '__name__'
97+ label => label . name !== '__name__'
9098 ) ;
91- const labelsToAdd = labels . map ( ( label ) => ( {
99+ const labelsToAdd = labels . map ( label => ( {
92100 key : label . name ,
93101 value : label . value ,
94102 } ) ) ;
@@ -102,7 +110,11 @@ const createThroughputContextMenuItems = (
102110 label : 'Add to query' ,
103111 icon : 'material-symbols:add' ,
104112 createDynamicItems : ( closestPoint , _series ) => {
105- if ( closestPoint == null || allData . length === 0 || allData [ closestPoint . seriesIndex ] == null ) {
113+ if (
114+ closestPoint == null ||
115+ allData . length === 0 ||
116+ allData [ closestPoint . seriesIndex ] == null
117+ ) {
106118 return [
107119 {
108120 id : 'no-labels-available' ,
@@ -128,10 +140,10 @@ const createThroughputContextMenuItems = (
128140 }
129141
130142 const labels = originalSeriesData . labelset . labels . filter (
131- ( label ) => label . name !== '__name__'
143+ label => label . name !== '__name__'
132144 ) ;
133145
134- return labels . map ( ( label ) => ( {
146+ return labels . map ( label => ( {
135147 id : `add-label-${ label . name } ` ,
136148 label : (
137149 < div className = "mr-3 inline-block rounded-lg bg-gray-200 px-2 py-1 text-xs font-bold text-gray-700 dark:bg-gray-700 dark:text-gray-300" >
@@ -146,7 +158,7 @@ const createThroughputContextMenuItems = (
146158 } ,
147159 } ) ) ;
148160 } ,
149- }
161+ } ,
150162 ] ;
151163} ;
152164
@@ -187,24 +199,30 @@ function transformToSeries(data: MetricSeries[], isReceive = false): NetworkSeri
187199 } ) ) ;
188200}
189201
190- function transformNetworkSeriesToSeries ( transmitData : MetricSeries [ ] , receiveData : MetricSeries [ ] ) : Series [ ] {
202+ function transformNetworkSeriesToSeries (
203+ transmitData : MetricSeries [ ] ,
204+ receiveData : MetricSeries [ ]
205+ ) : Series [ ] {
191206 const transmitSeries = transformToSeries ( transmitData ) ;
192207 const receiveSeries = transformToSeries ( receiveData , true ) ;
193208 const allSeries = [ ...transmitSeries , ...receiveSeries ] ;
194209
195- return allSeries . map ( ( networkSeries ) => {
210+ return allSeries . map ( networkSeries => {
196211 const labels = networkSeries . metric ?? [ ] ;
197212 const sortedLabels = labels
198213 . filter ( label => label . name !== '__name__' )
199214 . sort ( ( a , b ) => a . name . localeCompare ( b . name ) ) ;
200- const labelString = sortedLabels
201- . map ( label => ` ${ label . name } = ${ label . value } ` )
202- . join ( ',' ) ;
203- const id = ( networkSeries . isReceive === true ? 'receive-' : 'transmit-' ) + ( labelString !== '' ? labelString : 'default' ) ;
215+ const labelString = sortedLabels . map ( label => ` ${ label . name } = ${ label . value } ` ) . join ( ',' ) ;
216+ const id =
217+ ( networkSeries . isReceive === true ? 'receive-' : 'transmit-' ) +
218+ ( labelString !== '' ? labelString : 'default' ) ;
204219
205220 return {
206221 id,
207- values : networkSeries . values . map ( ( [ timestamp , value ] ) : [ number , number ] => [ timestamp , value ] ) ,
222+ values : networkSeries . values . map ( ( [ timestamp , value ] ) : [ number , number ] => [
223+ timestamp ,
224+ value ,
225+ ] ) ,
208226 } ;
209227 } ) ;
210228}
@@ -228,15 +246,18 @@ const RawAreaChart = ({
228246 const { timezone} = useParcaContext ( ) ;
229247
230248 // Compute original series data for rich tooltip
231- const allOriginalData = useMemo ( ( ) => [ ...transmitData , ...receiveData ] , [ transmitData , receiveData ] ) ;
249+ const allOriginalData = useMemo (
250+ ( ) => [ ...transmitData , ...receiveData ] ,
251+ [ transmitData , receiveData ]
252+ ) ;
232253
233254 return (
234255 < MetricsGraph
235256 data = { transformedData }
236257 from = { from }
237258 to = { to }
238259 setTimeRange = { setTimeRange }
239- onSampleClick = { ( closestPoint ) => {
260+ onSampleClick = { closestPoint => {
240261 if ( onSeriesClick != null ) {
241262 onSeriesClick ( closestPoint . seriesIndex ) ;
242263 }
@@ -288,16 +309,18 @@ const RawAreaChart = ({
288309 </ span >
289310 < span className = "my-2 block text-gray-500" >
290311 { labels
291- . filter ( ( label ) => label . name !== '__name__' )
292- . map ( ( label ) => (
312+ . filter ( label => label . name !== '__name__' )
313+ . map ( label => (
293314 < div
294315 key = { `${ seriesIndex . toString ( ) } -${ pointIndex . toString ( ) } -${ label . name } ` }
295316 className = "mr-3 inline-block rounded-lg bg-gray-200 px-2 py-1 text-xs font-bold text-gray-700 dark:bg-gray-700 dark:text-gray-400"
296317 >
297318 < TextWithTooltip
298319 text = { `${ transformUtilizationLabels ( label . name ) } ="${ label . value } "` }
299320 maxTextLength = { 37 }
300- id = { `${ seriesIndex . toString ( ) } -${ pointIndex . toString ( ) } -tooltip-${ label . name } ` }
321+ id = { `${ seriesIndex . toString ( ) } -${ pointIndex . toString ( ) } -tooltip-${
322+ label . name
323+ } `}
301324 />
302325 </ div >
303326 ) ) }
@@ -332,7 +355,10 @@ const AreaChart = ({
332355 const { isDarkMode} = useParcaContext ( ) ;
333356 const { width, height, margin, heightStyle} = useMetricsGraphDimensions ( false , true ) ;
334357
335- const transformedData = useMemo ( ( ) => transformNetworkSeriesToSeries ( transmitData , receiveData ) , [ transmitData , receiveData ] ) ;
358+ const transformedData = useMemo (
359+ ( ) => transformNetworkSeriesToSeries ( transmitData , receiveData ) ,
360+ [ transmitData , receiveData ]
361+ ) ;
336362
337363 const contextMenuItems = useMemo ( ( ) => {
338364 return createThroughputContextMenuItems ( addLabelMatcher , transmitData , receiveData ) ;
0 commit comments