bench: Split scripts
This commit is contained in:
237
bench/chart.svg
237
bench/chart.svg
@@ -150,8 +150,28 @@
|
|||||||
<text><tspan font-family="sans" > 4000</tspan></text>
|
<text><tspan font-family="sans" > 4000</tspan></text>
|
||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
|
<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
<path stroke='black' d='M74.17,420.94 L74.17,412.69 M74.17,70.51 L74.17,78.76 '/> <g transform="translate(72.38,431.73) rotate(30.00)" stroke="none" fill="black" font-family="sans" font-size="11.00" text-anchor="start">
|
||||||
|
<text><tspan font-family="sans" >v0.2.0</tspan></text>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
<path stroke='black' d='M155.50,420.94 L155.50,412.69 M155.50,70.51 L155.50,78.76 '/> <g transform="translate(153.71,431.73) rotate(30.00)" stroke="none" fill="black" font-family="sans" font-size="11.00" text-anchor="start">
|
||||||
|
<text><tspan font-family="sans" >v0.3.0</tspan></text>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
<path stroke='black' d='M236.83,420.94 L236.83,412.69 M236.83,70.51 L236.83,78.76 '/> <g transform="translate(235.04,431.73) rotate(30.00)" stroke="none" fill="black" font-family="sans" font-size="11.00" text-anchor="start">
|
<path stroke='black' d='M236.83,420.94 L236.83,412.69 M236.83,70.51 L236.83,78.76 '/> <g transform="translate(235.04,431.73) rotate(30.00)" stroke="none" fill="black" font-family="sans" font-size="11.00" text-anchor="start">
|
||||||
|
<text><tspan font-family="sans" >v0.4.0</tspan></text>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
<path stroke='black' d='M318.16,420.94 L318.16,412.69 M318.16,70.51 L318.16,78.76 '/> <g transform="translate(316.37,431.73) rotate(30.00)" stroke="none" fill="black" font-family="sans" font-size="11.00" text-anchor="start">
|
||||||
|
<text><tspan font-family="sans" >v0.5.0</tspan></text>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
<path stroke='black' d='M399.49,420.94 L399.49,412.69 M399.49,70.51 L399.49,78.76 '/> <g transform="translate(397.70,431.73) rotate(30.00)" stroke="none" fill="black" font-family="sans" font-size="11.00" text-anchor="start">
|
||||||
<text><tspan font-family="sans" >v0.6.0</tspan></text>
|
<text><tspan font-family="sans" >v0.6.0</tspan></text>
|
||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
@@ -170,7 +190,11 @@
|
|||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
<g fill="none" color="black" stroke="currentColor" stroke-width="2.00" stroke-linecap="butt" stroke-linejoin="miter">
|
<g fill="none" color="black" stroke="currentColor" stroke-width="2.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
<path stroke='rgb( 37, 99, 235)' d='M545.60,78.76 L584.61,78.76 M236.83,306.07 '/> <use xlink:href='#gpPt6' transform='translate(236.83,306.07) scale(4.12)' color='rgb( 37, 99, 235)'/>
|
<path stroke='rgb( 37, 99, 235)' d='M545.60,78.76 L584.61,78.76 M74.17,310.54 L155.50,273.69 L236.83,276.90 L318.16,281.03 L399.49,306.07 '/> <use xlink:href='#gpPt6' transform='translate(74.17,310.54) scale(4.12)' color='rgb( 37, 99, 235)'/>
|
||||||
|
<use xlink:href='#gpPt6' transform='translate(155.50,273.69) scale(4.12)' color='rgb( 37, 99, 235)'/>
|
||||||
|
<use xlink:href='#gpPt6' transform='translate(236.83,276.90) scale(4.12)' color='rgb( 37, 99, 235)'/>
|
||||||
|
<use xlink:href='#gpPt6' transform='translate(318.16,281.03) scale(4.12)' color='rgb( 37, 99, 235)'/>
|
||||||
|
<use xlink:href='#gpPt6' transform='translate(399.49,306.07) scale(4.12)' color='rgb( 37, 99, 235)'/>
|
||||||
<use xlink:href='#gpPt6' transform='translate(565.10,78.76) scale(4.12)' color='rgb( 37, 99, 235)'/>
|
<use xlink:href='#gpPt6' transform='translate(565.10,78.76) scale(4.12)' color='rgb( 37, 99, 235)'/>
|
||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
@@ -181,7 +205,11 @@
|
|||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
<g fill="none" color="black" stroke="currentColor" stroke-width="2.00" stroke-linecap="butt" stroke-linejoin="miter">
|
<g fill="none" color="black" stroke="currentColor" stroke-width="2.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
<path stroke='rgb( 22, 163, 74)' d='M545.60,95.26 L584.61,95.26 M236.83,382.69 '/> <use xlink:href='#gpPt8' transform='translate(236.83,382.69) scale(4.12)' color='rgb( 22, 163, 74)'/>
|
<path stroke='rgb( 22, 163, 74)' d='M545.60,95.26 L584.61,95.26 M74.17,312.97 L155.50,275.49 L236.83,313.51 L318.16,333.83 L399.49,382.69 '/> <use xlink:href='#gpPt8' transform='translate(74.17,312.97) scale(4.12)' color='rgb( 22, 163, 74)'/>
|
||||||
|
<use xlink:href='#gpPt8' transform='translate(155.50,275.49) scale(4.12)' color='rgb( 22, 163, 74)'/>
|
||||||
|
<use xlink:href='#gpPt8' transform='translate(236.83,313.51) scale(4.12)' color='rgb( 22, 163, 74)'/>
|
||||||
|
<use xlink:href='#gpPt8' transform='translate(318.16,333.83) scale(4.12)' color='rgb( 22, 163, 74)'/>
|
||||||
|
<use xlink:href='#gpPt8' transform='translate(399.49,382.69) scale(4.12)' color='rgb( 22, 163, 74)'/>
|
||||||
<use xlink:href='#gpPt8' transform='translate(565.10,95.26) scale(4.12)' color='rgb( 22, 163, 74)'/>
|
<use xlink:href='#gpPt8' transform='translate(565.10,95.26) scale(4.12)' color='rgb( 22, 163, 74)'/>
|
||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
@@ -194,7 +222,11 @@
|
|||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
<g fill="none" color="black" stroke="currentColor" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
<g fill="none" color="black" stroke="currentColor" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
<path stroke='rgb(234, 88, 12)' stroke-dasharray='3.8,6.0' d='M545.60,111.76 L584.61,111.76 M236.83,115.73 '/> <use xlink:href='#gpPt4' transform='translate(236.83,115.73) scale(3.30)' color='rgb(234, 88, 12)'/>
|
<path stroke='rgb(234, 88, 12)' stroke-dasharray='3.8,6.0' d='M545.60,111.76 L584.61,111.76 M74.17,122.84 L155.50,126.38 L236.83,132.52 L318.16,127.91 L399.49,115.73 '/> <use xlink:href='#gpPt4' transform='translate(74.17,122.84) scale(3.30)' color='rgb(234, 88, 12)'/>
|
||||||
|
<use xlink:href='#gpPt4' transform='translate(155.50,126.38) scale(3.30)' color='rgb(234, 88, 12)'/>
|
||||||
|
<use xlink:href='#gpPt4' transform='translate(236.83,132.52) scale(3.30)' color='rgb(234, 88, 12)'/>
|
||||||
|
<use xlink:href='#gpPt4' transform='translate(318.16,127.91) scale(3.30)' color='rgb(234, 88, 12)'/>
|
||||||
|
<use xlink:href='#gpPt4' transform='translate(399.49,115.73) scale(3.30)' color='rgb(234, 88, 12)'/>
|
||||||
<use xlink:href='#gpPt4' transform='translate(565.10,111.76) scale(3.30)' color='rgb(234, 88, 12)'/>
|
<use xlink:href='#gpPt4' transform='translate(565.10,111.76) scale(3.30)' color='rgb(234, 88, 12)'/>
|
||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
@@ -205,7 +237,11 @@
|
|||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
<g fill="none" color="black" stroke="currentColor" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
<g fill="none" color="black" stroke="currentColor" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
<path stroke='rgb(220, 38, 38)' stroke-dasharray='3.8,6.0' d='M545.60,128.26 L584.61,128.26 M236.83,392.20 '/> <use xlink:href='#gpPt3' transform='translate(236.83,392.20) scale(3.30)' color='rgb(220, 38, 38)'/>
|
<path stroke='rgb(220, 38, 38)' stroke-dasharray='3.8,6.0' d='M545.60,128.26 L584.61,128.26 M74.17,394.71 L155.50,394.74 L236.83,394.11 L318.16,393.64 L399.49,392.20 '/> <use xlink:href='#gpPt3' transform='translate(74.17,394.71) scale(3.30)' color='rgb(220, 38, 38)'/>
|
||||||
|
<use xlink:href='#gpPt3' transform='translate(155.50,394.74) scale(3.30)' color='rgb(220, 38, 38)'/>
|
||||||
|
<use xlink:href='#gpPt3' transform='translate(236.83,394.11) scale(3.30)' color='rgb(220, 38, 38)'/>
|
||||||
|
<use xlink:href='#gpPt3' transform='translate(318.16,393.64) scale(3.30)' color='rgb(220, 38, 38)'/>
|
||||||
|
<use xlink:href='#gpPt3' transform='translate(399.49,392.20) scale(3.30)' color='rgb(220, 38, 38)'/>
|
||||||
<use xlink:href='#gpPt3' transform='translate(565.10,128.26) scale(3.30)' color='rgb(220, 38, 38)'/>
|
<use xlink:href='#gpPt3' transform='translate(565.10,128.26) scale(3.30)' color='rgb(220, 38, 38)'/>
|
||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
@@ -333,8 +369,28 @@
|
|||||||
<text><tspan font-family="sans" > 7000</tspan></text>
|
<text><tspan font-family="sans" > 7000</tspan></text>
|
||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
|
<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
<path stroke='black' d='M674.17,420.94 L674.17,412.69 M674.17,70.51 L674.17,78.76 '/> <g transform="translate(672.38,431.73) rotate(30.00)" stroke="none" fill="black" font-family="sans" font-size="11.00" text-anchor="start">
|
||||||
|
<text><tspan font-family="sans" >v0.2.0</tspan></text>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
<path stroke='black' d='M755.50,420.94 L755.50,412.69 M755.50,70.51 L755.50,78.76 '/> <g transform="translate(753.71,431.73) rotate(30.00)" stroke="none" fill="black" font-family="sans" font-size="11.00" text-anchor="start">
|
||||||
|
<text><tspan font-family="sans" >v0.3.0</tspan></text>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
<path stroke='black' d='M836.83,420.94 L836.83,412.69 M836.83,70.51 L836.83,78.76 '/> <g transform="translate(835.04,431.73) rotate(30.00)" stroke="none" fill="black" font-family="sans" font-size="11.00" text-anchor="start">
|
<path stroke='black' d='M836.83,420.94 L836.83,412.69 M836.83,70.51 L836.83,78.76 '/> <g transform="translate(835.04,431.73) rotate(30.00)" stroke="none" fill="black" font-family="sans" font-size="11.00" text-anchor="start">
|
||||||
|
<text><tspan font-family="sans" >v0.4.0</tspan></text>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
<path stroke='black' d='M918.16,420.94 L918.16,412.69 M918.16,70.51 L918.16,78.76 '/> <g transform="translate(916.37,431.73) rotate(30.00)" stroke="none" fill="black" font-family="sans" font-size="11.00" text-anchor="start">
|
||||||
|
<text><tspan font-family="sans" >v0.5.0</tspan></text>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
<path stroke='black' d='M999.49,420.94 L999.49,412.69 M999.49,70.51 L999.49,78.76 '/> <g transform="translate(997.70,431.73) rotate(30.00)" stroke="none" fill="black" font-family="sans" font-size="11.00" text-anchor="start">
|
||||||
<text><tspan font-family="sans" >v0.6.0</tspan></text>
|
<text><tspan font-family="sans" >v0.6.0</tspan></text>
|
||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
@@ -353,7 +409,11 @@
|
|||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
<g fill="none" color="black" stroke="currentColor" stroke-width="2.00" stroke-linecap="butt" stroke-linejoin="miter">
|
<g fill="none" color="black" stroke="currentColor" stroke-width="2.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
<path stroke='rgb( 37, 99, 235)' d='M1145.60,78.76 L1184.61,78.76 M836.83,241.89 '/> <use xlink:href='#gpPt6' transform='translate(836.83,241.89) scale(4.12)' color='rgb( 37, 99, 235)'/>
|
<path stroke='rgb( 37, 99, 235)' d='M1145.60,78.76 L1184.61,78.76 M674.17,299.89 L755.50,240.02 L836.83,189.67 L918.16,420.27 L999.49,241.89 '/> <use xlink:href='#gpPt6' transform='translate(674.17,299.89) scale(4.12)' color='rgb( 37, 99, 235)'/>
|
||||||
|
<use xlink:href='#gpPt6' transform='translate(755.50,240.02) scale(4.12)' color='rgb( 37, 99, 235)'/>
|
||||||
|
<use xlink:href='#gpPt6' transform='translate(836.83,189.67) scale(4.12)' color='rgb( 37, 99, 235)'/>
|
||||||
|
<use xlink:href='#gpPt6' transform='translate(918.16,420.27) scale(4.12)' color='rgb( 37, 99, 235)'/>
|
||||||
|
<use xlink:href='#gpPt6' transform='translate(999.49,241.89) scale(4.12)' color='rgb( 37, 99, 235)'/>
|
||||||
<use xlink:href='#gpPt6' transform='translate(1165.10,78.76) scale(4.12)' color='rgb( 37, 99, 235)'/>
|
<use xlink:href='#gpPt6' transform='translate(1165.10,78.76) scale(4.12)' color='rgb( 37, 99, 235)'/>
|
||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
@@ -364,7 +424,11 @@
|
|||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
<g fill="none" color="black" stroke="currentColor" stroke-width="2.00" stroke-linecap="butt" stroke-linejoin="miter">
|
<g fill="none" color="black" stroke="currentColor" stroke-width="2.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
<path stroke='rgb( 22, 163, 74)' d='M1145.60,95.26 L1184.61,95.26 M836.83,76.12 '/> <use xlink:href='#gpPt8' transform='translate(836.83,76.12) scale(4.12)' color='rgb( 22, 163, 74)'/>
|
<path stroke='rgb( 22, 163, 74)' d='M1145.60,95.26 L1184.61,95.26 M674.17,299.22 L755.50,239.92 L836.83,182.25 L918.16,418.59 L999.49,76.12 '/> <use xlink:href='#gpPt8' transform='translate(674.17,299.22) scale(4.12)' color='rgb( 22, 163, 74)'/>
|
||||||
|
<use xlink:href='#gpPt8' transform='translate(755.50,239.92) scale(4.12)' color='rgb( 22, 163, 74)'/>
|
||||||
|
<use xlink:href='#gpPt8' transform='translate(836.83,182.25) scale(4.12)' color='rgb( 22, 163, 74)'/>
|
||||||
|
<use xlink:href='#gpPt8' transform='translate(918.16,418.59) scale(4.12)' color='rgb( 22, 163, 74)'/>
|
||||||
|
<use xlink:href='#gpPt8' transform='translate(999.49,76.12) scale(4.12)' color='rgb( 22, 163, 74)'/>
|
||||||
<use xlink:href='#gpPt8' transform='translate(1165.10,95.26) scale(4.12)' color='rgb( 22, 163, 74)'/>
|
<use xlink:href='#gpPt8' transform='translate(1165.10,95.26) scale(4.12)' color='rgb( 22, 163, 74)'/>
|
||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
@@ -377,7 +441,11 @@
|
|||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
<g fill="none" color="black" stroke="currentColor" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
<g fill="none" color="black" stroke="currentColor" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
<path stroke='rgb(234, 88, 12)' stroke-dasharray='3.8,6.0' d='M1145.60,111.76 L1184.61,111.76 M836.83,330.43 '/> <use xlink:href='#gpPt4' transform='translate(836.83,330.43) scale(3.30)' color='rgb(234, 88, 12)'/>
|
<path stroke='rgb(234, 88, 12)' stroke-dasharray='3.8,6.0' d='M1145.60,111.76 L1184.61,111.76 M674.17,330.63 L755.50,330.63 L836.83,329.81 L918.16,330.26 L999.49,330.43 '/> <use xlink:href='#gpPt4' transform='translate(674.17,330.63) scale(3.30)' color='rgb(234, 88, 12)'/>
|
||||||
|
<use xlink:href='#gpPt4' transform='translate(755.50,330.63) scale(3.30)' color='rgb(234, 88, 12)'/>
|
||||||
|
<use xlink:href='#gpPt4' transform='translate(836.83,329.81) scale(3.30)' color='rgb(234, 88, 12)'/>
|
||||||
|
<use xlink:href='#gpPt4' transform='translate(918.16,330.26) scale(3.30)' color='rgb(234, 88, 12)'/>
|
||||||
|
<use xlink:href='#gpPt4' transform='translate(999.49,330.43) scale(3.30)' color='rgb(234, 88, 12)'/>
|
||||||
<use xlink:href='#gpPt4' transform='translate(1165.10,111.76) scale(3.30)' color='rgb(234, 88, 12)'/>
|
<use xlink:href='#gpPt4' transform='translate(1165.10,111.76) scale(3.30)' color='rgb(234, 88, 12)'/>
|
||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
@@ -388,7 +456,11 @@
|
|||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
<g fill="none" color="black" stroke="currentColor" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
<g fill="none" color="black" stroke="currentColor" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
<path stroke='rgb(220, 38, 38)' stroke-dasharray='3.8,6.0' d='M1145.60,128.26 L1184.61,128.26 M836.83,377.85 '/> <use xlink:href='#gpPt3' transform='translate(836.83,377.85) scale(3.30)' color='rgb(220, 38, 38)'/>
|
<path stroke='rgb(220, 38, 38)' stroke-dasharray='3.8,6.0' d='M1145.60,128.26 L1184.61,128.26 M674.17,379.34 L755.50,378.57 L836.83,378.52 L918.16,376.97 L999.49,377.85 '/> <use xlink:href='#gpPt3' transform='translate(674.17,379.34) scale(3.30)' color='rgb(220, 38, 38)'/>
|
||||||
|
<use xlink:href='#gpPt3' transform='translate(755.50,378.57) scale(3.30)' color='rgb(220, 38, 38)'/>
|
||||||
|
<use xlink:href='#gpPt3' transform='translate(836.83,378.52) scale(3.30)' color='rgb(220, 38, 38)'/>
|
||||||
|
<use xlink:href='#gpPt3' transform='translate(918.16,376.97) scale(3.30)' color='rgb(220, 38, 38)'/>
|
||||||
|
<use xlink:href='#gpPt3' transform='translate(999.49,377.85) scale(3.30)' color='rgb(220, 38, 38)'/>
|
||||||
<use xlink:href='#gpPt3' transform='translate(1165.10,128.26) scale(3.30)' color='rgb(220, 38, 38)'/>
|
<use xlink:href='#gpPt3' transform='translate(1165.10,128.26) scale(3.30)' color='rgb(220, 38, 38)'/>
|
||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
@@ -516,8 +588,28 @@
|
|||||||
<text><tspan font-family="sans" > 180000</tspan></text>
|
<text><tspan font-family="sans" > 180000</tspan></text>
|
||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
|
<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
<path stroke='black' d='M89.55,860.44 L89.55,852.19 M89.55,510.00 L89.55,518.25 '/> <g transform="translate(87.76,871.23) rotate(30.00)" stroke="none" fill="black" font-family="sans" font-size="11.00" text-anchor="start">
|
||||||
|
<text><tspan font-family="sans" >v0.2.0</tspan></text>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
<path stroke='black' d='M167.04,860.44 L167.04,852.19 M167.04,510.00 L167.04,518.25 '/> <g transform="translate(165.25,871.23) rotate(30.00)" stroke="none" fill="black" font-family="sans" font-size="11.00" text-anchor="start">
|
||||||
|
<text><tspan font-family="sans" >v0.3.0</tspan></text>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
<path stroke='black' d='M244.52,860.44 L244.52,852.19 M244.52,510.00 L244.52,518.25 '/> <g transform="translate(242.73,871.23) rotate(30.00)" stroke="none" fill="black" font-family="sans" font-size="11.00" text-anchor="start">
|
<path stroke='black' d='M244.52,860.44 L244.52,852.19 M244.52,510.00 L244.52,518.25 '/> <g transform="translate(242.73,871.23) rotate(30.00)" stroke="none" fill="black" font-family="sans" font-size="11.00" text-anchor="start">
|
||||||
|
<text><tspan font-family="sans" >v0.4.0</tspan></text>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
<path stroke='black' d='M322.01,860.44 L322.01,852.19 M322.01,510.00 L322.01,518.25 '/> <g transform="translate(320.22,871.23) rotate(30.00)" stroke="none" fill="black" font-family="sans" font-size="11.00" text-anchor="start">
|
||||||
|
<text><tspan font-family="sans" >v0.5.0</tspan></text>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
<path stroke='black' d='M399.49,860.44 L399.49,852.19 M399.49,510.00 L399.49,518.25 '/> <g transform="translate(397.70,871.23) rotate(30.00)" stroke="none" fill="black" font-family="sans" font-size="11.00" text-anchor="start">
|
||||||
<text><tspan font-family="sans" >v0.6.0</tspan></text>
|
<text><tspan font-family="sans" >v0.6.0</tspan></text>
|
||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
@@ -536,7 +628,11 @@
|
|||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
<g fill="none" color="black" stroke="currentColor" stroke-width="2.00" stroke-linecap="butt" stroke-linejoin="miter">
|
<g fill="none" color="black" stroke="currentColor" stroke-width="2.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
<path stroke='rgb( 37, 99, 235)' d='M545.60,518.25 L584.61,518.25 M244.52,790.10 '/> <use xlink:href='#gpPt6' transform='translate(244.52,790.10) scale(4.12)' color='rgb( 37, 99, 235)'/>
|
<path stroke='rgb( 37, 99, 235)' d='M545.60,518.25 L584.61,518.25 M89.55,767.49 L167.04,783.59 L244.52,787.50 L322.01,779.24 L399.49,790.10 '/> <use xlink:href='#gpPt6' transform='translate(89.55,767.49) scale(4.12)' color='rgb( 37, 99, 235)'/>
|
||||||
|
<use xlink:href='#gpPt6' transform='translate(167.04,783.59) scale(4.12)' color='rgb( 37, 99, 235)'/>
|
||||||
|
<use xlink:href='#gpPt6' transform='translate(244.52,787.50) scale(4.12)' color='rgb( 37, 99, 235)'/>
|
||||||
|
<use xlink:href='#gpPt6' transform='translate(322.01,779.24) scale(4.12)' color='rgb( 37, 99, 235)'/>
|
||||||
|
<use xlink:href='#gpPt6' transform='translate(399.49,790.10) scale(4.12)' color='rgb( 37, 99, 235)'/>
|
||||||
<use xlink:href='#gpPt6' transform='translate(565.10,518.25) scale(4.12)' color='rgb( 37, 99, 235)'/>
|
<use xlink:href='#gpPt6' transform='translate(565.10,518.25) scale(4.12)' color='rgb( 37, 99, 235)'/>
|
||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
@@ -547,7 +643,11 @@
|
|||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
<g fill="none" color="black" stroke="currentColor" stroke-width="2.00" stroke-linecap="butt" stroke-linejoin="miter">
|
<g fill="none" color="black" stroke="currentColor" stroke-width="2.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
<path stroke='rgb( 22, 163, 74)' d='M545.60,534.75 L584.61,534.75 M244.52,820.44 '/> <use xlink:href='#gpPt8' transform='translate(244.52,820.44) scale(4.12)' color='rgb( 22, 163, 74)'/>
|
<path stroke='rgb( 22, 163, 74)' d='M545.60,534.75 L584.61,534.75 M89.55,799.82 L167.04,809.24 L244.52,803.58 L322.01,803.61 L399.49,820.44 '/> <use xlink:href='#gpPt8' transform='translate(89.55,799.82) scale(4.12)' color='rgb( 22, 163, 74)'/>
|
||||||
|
<use xlink:href='#gpPt8' transform='translate(167.04,809.24) scale(4.12)' color='rgb( 22, 163, 74)'/>
|
||||||
|
<use xlink:href='#gpPt8' transform='translate(244.52,803.58) scale(4.12)' color='rgb( 22, 163, 74)'/>
|
||||||
|
<use xlink:href='#gpPt8' transform='translate(322.01,803.61) scale(4.12)' color='rgb( 22, 163, 74)'/>
|
||||||
|
<use xlink:href='#gpPt8' transform='translate(399.49,820.44) scale(4.12)' color='rgb( 22, 163, 74)'/>
|
||||||
<use xlink:href='#gpPt8' transform='translate(565.10,534.75) scale(4.12)' color='rgb( 22, 163, 74)'/>
|
<use xlink:href='#gpPt8' transform='translate(565.10,534.75) scale(4.12)' color='rgb( 22, 163, 74)'/>
|
||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
@@ -560,7 +660,11 @@
|
|||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
<g fill="none" color="black" stroke="currentColor" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
<g fill="none" color="black" stroke="currentColor" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
<path stroke='rgb(234, 88, 12)' stroke-dasharray='3.8,6.0' d='M545.60,551.25 L584.61,551.25 M244.52,791.06 '/> <use xlink:href='#gpPt4' transform='translate(244.52,791.06) scale(3.30)' color='rgb(234, 88, 12)'/>
|
<path stroke='rgb(234, 88, 12)' stroke-dasharray='3.8,6.0' d='M545.60,551.25 L584.61,551.25 M89.55,801.16 L167.04,802.55 L244.52,807.98 L322.01,807.40 L399.49,791.06 '/> <use xlink:href='#gpPt4' transform='translate(89.55,801.16) scale(3.30)' color='rgb(234, 88, 12)'/>
|
||||||
|
<use xlink:href='#gpPt4' transform='translate(167.04,802.55) scale(3.30)' color='rgb(234, 88, 12)'/>
|
||||||
|
<use xlink:href='#gpPt4' transform='translate(244.52,807.98) scale(3.30)' color='rgb(234, 88, 12)'/>
|
||||||
|
<use xlink:href='#gpPt4' transform='translate(322.01,807.40) scale(3.30)' color='rgb(234, 88, 12)'/>
|
||||||
|
<use xlink:href='#gpPt4' transform='translate(399.49,791.06) scale(3.30)' color='rgb(234, 88, 12)'/>
|
||||||
<use xlink:href='#gpPt4' transform='translate(565.10,551.25) scale(3.30)' color='rgb(234, 88, 12)'/>
|
<use xlink:href='#gpPt4' transform='translate(565.10,551.25) scale(3.30)' color='rgb(234, 88, 12)'/>
|
||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
@@ -571,7 +675,11 @@
|
|||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
<g fill="none" color="black" stroke="currentColor" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
<g fill="none" color="black" stroke="currentColor" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
<path stroke='rgb(220, 38, 38)' stroke-dasharray='3.8,6.0' d='M545.60,567.75 L584.61,567.75 M244.52,544.60 '/> <use xlink:href='#gpPt3' transform='translate(244.52,544.60) scale(3.30)' color='rgb(220, 38, 38)'/>
|
<path stroke='rgb(220, 38, 38)' stroke-dasharray='3.8,6.0' d='M545.60,567.75 L584.61,567.75 M89.55,560.04 L167.04,547.56 L244.52,557.15 L322.01,578.45 L399.49,544.60 '/> <use xlink:href='#gpPt3' transform='translate(89.55,560.04) scale(3.30)' color='rgb(220, 38, 38)'/>
|
||||||
|
<use xlink:href='#gpPt3' transform='translate(167.04,547.56) scale(3.30)' color='rgb(220, 38, 38)'/>
|
||||||
|
<use xlink:href='#gpPt3' transform='translate(244.52,557.15) scale(3.30)' color='rgb(220, 38, 38)'/>
|
||||||
|
<use xlink:href='#gpPt3' transform='translate(322.01,578.45) scale(3.30)' color='rgb(220, 38, 38)'/>
|
||||||
|
<use xlink:href='#gpPt3' transform='translate(399.49,544.60) scale(3.30)' color='rgb(220, 38, 38)'/>
|
||||||
<use xlink:href='#gpPt3' transform='translate(565.10,567.75) scale(3.30)' color='rgb(220, 38, 38)'/>
|
<use xlink:href='#gpPt3' transform='translate(565.10,567.75) scale(3.30)' color='rgb(220, 38, 38)'/>
|
||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
@@ -613,11 +721,11 @@
|
|||||||
<g fill="none" color="black" stroke="black" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
<g fill="none" color="black" stroke="black" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
</g>
|
</g>
|
||||||
<g fill="none" color="gray" stroke="currentColor" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
<g fill="none" color="gray" stroke="currentColor" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
<path stroke='gray' stroke-dasharray='2,4' class="gridline" d='M658.79,802.03 L999.49,802.03 '/></g>
|
<path stroke='gray' stroke-dasharray='2,4' class="gridline" d='M658.79,821.50 L999.49,821.50 '/></g>
|
||||||
<g fill="none" color="gray" stroke="gray" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
<g fill="none" color="gray" stroke="gray" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
</g>
|
</g>
|
||||||
<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
<path stroke='black' d='M658.79,802.03 L667.04,802.03 M999.49,802.03 L991.24,802.03 '/> <g transform="translate(651.10,805.61)" stroke="none" fill="black" font-family="sans" font-size="11.00" text-anchor="end">
|
<path stroke='black' d='M658.79,821.50 L667.04,821.50 M999.49,821.50 L991.24,821.50 '/> <g transform="translate(651.10,825.08)" stroke="none" fill="black" font-family="sans" font-size="11.00" text-anchor="end">
|
||||||
<text><tspan font-family="sans" > 5</tspan></text>
|
<text><tspan font-family="sans" > 5</tspan></text>
|
||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
@@ -625,13 +733,26 @@
|
|||||||
</g>
|
</g>
|
||||||
<g fill="none" color="black" stroke="black" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
<g fill="none" color="black" stroke="black" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
</g>
|
</g>
|
||||||
|
<g fill="none" color="gray" stroke="currentColor" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
<path stroke='gray' stroke-dasharray='2,4' class="gridline" d='M658.79,782.56 L999.49,782.56 '/></g>
|
||||||
|
<g fill="none" color="gray" stroke="gray" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
</g>
|
||||||
|
<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
<path stroke='black' d='M658.79,782.56 L667.04,782.56 M999.49,782.56 L991.24,782.56 '/> <g transform="translate(651.10,786.14)" stroke="none" fill="black" font-family="sans" font-size="11.00" text-anchor="end">
|
||||||
|
<text><tspan font-family="sans" > 10</tspan></text>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
</g>
|
||||||
|
<g fill="none" color="black" stroke="black" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
</g>
|
||||||
<g fill="none" color="gray" stroke="currentColor" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
<g fill="none" color="gray" stroke="currentColor" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
<path stroke='gray' stroke-dasharray='2,4' class="gridline" d='M658.79,743.63 L999.49,743.63 '/></g>
|
<path stroke='gray' stroke-dasharray='2,4' class="gridline" d='M658.79,743.63 L999.49,743.63 '/></g>
|
||||||
<g fill="none" color="gray" stroke="gray" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
<g fill="none" color="gray" stroke="gray" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
</g>
|
</g>
|
||||||
<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
<path stroke='black' d='M658.79,743.63 L667.04,743.63 M999.49,743.63 L991.24,743.63 '/> <g transform="translate(651.10,747.21)" stroke="none" fill="black" font-family="sans" font-size="11.00" text-anchor="end">
|
<path stroke='black' d='M658.79,743.63 L667.04,743.63 M999.49,743.63 L991.24,743.63 '/> <g transform="translate(651.10,747.21)" stroke="none" fill="black" font-family="sans" font-size="11.00" text-anchor="end">
|
||||||
<text><tspan font-family="sans" > 10</tspan></text>
|
<text><tspan font-family="sans" > 15</tspan></text>
|
||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
@@ -639,12 +760,25 @@
|
|||||||
<g fill="none" color="black" stroke="black" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
<g fill="none" color="black" stroke="black" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
</g>
|
</g>
|
||||||
<g fill="none" color="gray" stroke="currentColor" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
<g fill="none" color="gray" stroke="currentColor" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
<path stroke='gray' stroke-dasharray='2,4' class="gridline" d='M658.79,685.22 L999.49,685.22 '/></g>
|
<path stroke='gray' stroke-dasharray='2,4' class="gridline" d='M658.79,704.69 L999.49,704.69 '/></g>
|
||||||
<g fill="none" color="gray" stroke="gray" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
<g fill="none" color="gray" stroke="gray" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
</g>
|
</g>
|
||||||
<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
<path stroke='black' d='M658.79,685.22 L667.04,685.22 M999.49,685.22 L991.24,685.22 '/> <g transform="translate(651.10,688.80)" stroke="none" fill="black" font-family="sans" font-size="11.00" text-anchor="end">
|
<path stroke='black' d='M658.79,704.69 L667.04,704.69 M999.49,704.69 L991.24,704.69 '/> <g transform="translate(651.10,708.27)" stroke="none" fill="black" font-family="sans" font-size="11.00" text-anchor="end">
|
||||||
<text><tspan font-family="sans" > 15</tspan></text>
|
<text><tspan font-family="sans" > 20</tspan></text>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
</g>
|
||||||
|
<g fill="none" color="black" stroke="black" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
</g>
|
||||||
|
<g fill="none" color="gray" stroke="currentColor" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
<path stroke='gray' stroke-dasharray='2,4' class="gridline" d='M658.79,665.75 L999.49,665.75 '/></g>
|
||||||
|
<g fill="none" color="gray" stroke="gray" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
</g>
|
||||||
|
<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
<path stroke='black' d='M658.79,665.75 L667.04,665.75 M999.49,665.75 L991.24,665.75 '/> <g transform="translate(651.10,669.33)" stroke="none" fill="black" font-family="sans" font-size="11.00" text-anchor="end">
|
||||||
|
<text><tspan font-family="sans" > 25</tspan></text>
|
||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
@@ -657,7 +791,7 @@
|
|||||||
</g>
|
</g>
|
||||||
<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
<path stroke='black' d='M658.79,626.81 L667.04,626.81 M999.49,626.81 L991.24,626.81 '/> <g transform="translate(651.10,630.39)" stroke="none" fill="black" font-family="sans" font-size="11.00" text-anchor="end">
|
<path stroke='black' d='M658.79,626.81 L667.04,626.81 M999.49,626.81 L991.24,626.81 '/> <g transform="translate(651.10,630.39)" stroke="none" fill="black" font-family="sans" font-size="11.00" text-anchor="end">
|
||||||
<text><tspan font-family="sans" > 20</tspan></text>
|
<text><tspan font-family="sans" > 30</tspan></text>
|
||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
@@ -665,12 +799,25 @@
|
|||||||
<g fill="none" color="black" stroke="black" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
<g fill="none" color="black" stroke="black" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
</g>
|
</g>
|
||||||
<g fill="none" color="gray" stroke="currentColor" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
<g fill="none" color="gray" stroke="currentColor" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
<path stroke='gray' stroke-dasharray='2,4' class="gridline" d='M658.79,568.41 L999.49,568.41 '/></g>
|
<path stroke='gray' stroke-dasharray='2,4' class="gridline" d='M658.79,587.88 L999.49,587.88 '/></g>
|
||||||
<g fill="none" color="gray" stroke="gray" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
<g fill="none" color="gray" stroke="gray" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
</g>
|
</g>
|
||||||
<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
<path stroke='black' d='M658.79,568.41 L667.04,568.41 M999.49,568.41 L991.24,568.41 '/> <g transform="translate(651.10,571.99)" stroke="none" fill="black" font-family="sans" font-size="11.00" text-anchor="end">
|
<path stroke='black' d='M658.79,587.88 L667.04,587.88 M999.49,587.88 L991.24,587.88 '/> <g transform="translate(651.10,591.46)" stroke="none" fill="black" font-family="sans" font-size="11.00" text-anchor="end">
|
||||||
<text><tspan font-family="sans" > 25</tspan></text>
|
<text><tspan font-family="sans" > 35</tspan></text>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
</g>
|
||||||
|
<g fill="none" color="black" stroke="black" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
</g>
|
||||||
|
<g fill="none" color="gray" stroke="currentColor" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
<path stroke='gray' stroke-dasharray='2,4' class="gridline" d='M658.79,548.94 L999.49,548.94 '/></g>
|
||||||
|
<g fill="none" color="gray" stroke="gray" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
</g>
|
||||||
|
<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
<path stroke='black' d='M658.79,548.94 L667.04,548.94 M999.49,548.94 L991.24,548.94 '/> <g transform="translate(651.10,552.52)" stroke="none" fill="black" font-family="sans" font-size="11.00" text-anchor="end">
|
||||||
|
<text><tspan font-family="sans" > 40</tspan></text>
|
||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
@@ -683,11 +830,31 @@
|
|||||||
</g>
|
</g>
|
||||||
<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
<path stroke='black' d='M658.79,510.00 L667.04,510.00 M999.49,510.00 L991.24,510.00 '/> <g transform="translate(651.10,513.58)" stroke="none" fill="black" font-family="sans" font-size="11.00" text-anchor="end">
|
<path stroke='black' d='M658.79,510.00 L667.04,510.00 M999.49,510.00 L991.24,510.00 '/> <g transform="translate(651.10,513.58)" stroke="none" fill="black" font-family="sans" font-size="11.00" text-anchor="end">
|
||||||
<text><tspan font-family="sans" > 30</tspan></text>
|
<text><tspan font-family="sans" > 45</tspan></text>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
<path stroke='black' d='M658.79,860.44 L658.79,852.19 M658.79,510.00 L658.79,518.25 '/> <g transform="translate(657.00,871.23) rotate(30.00)" stroke="none" fill="black" font-family="sans" font-size="11.00" text-anchor="start">
|
||||||
|
<text><tspan font-family="sans" >v0.2.0</tspan></text>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
<path stroke='black' d='M743.97,860.44 L743.97,852.19 M743.97,510.00 L743.97,518.25 '/> <g transform="translate(742.18,871.23) rotate(30.00)" stroke="none" fill="black" font-family="sans" font-size="11.00" text-anchor="start">
|
||||||
|
<text><tspan font-family="sans" >v0.3.0</tspan></text>
|
||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
<path stroke='black' d='M829.14,860.44 L829.14,852.19 M829.14,510.00 L829.14,518.25 '/> <g transform="translate(827.35,871.23) rotate(30.00)" stroke="none" fill="black" font-family="sans" font-size="11.00" text-anchor="start">
|
<path stroke='black' d='M829.14,860.44 L829.14,852.19 M829.14,510.00 L829.14,518.25 '/> <g transform="translate(827.35,871.23) rotate(30.00)" stroke="none" fill="black" font-family="sans" font-size="11.00" text-anchor="start">
|
||||||
|
<text><tspan font-family="sans" >v0.4.0</tspan></text>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
<path stroke='black' d='M914.32,860.44 L914.32,852.19 M914.32,510.00 L914.32,518.25 '/> <g transform="translate(912.53,871.23) rotate(30.00)" stroke="none" fill="black" font-family="sans" font-size="11.00" text-anchor="start">
|
||||||
|
<text><tspan font-family="sans" >v0.5.0</tspan></text>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
|
<path stroke='black' d='M999.49,860.44 L999.49,852.19 M999.49,510.00 L999.49,518.25 '/> <g transform="translate(997.70,871.23) rotate(30.00)" stroke="none" fill="black" font-family="sans" font-size="11.00" text-anchor="start">
|
||||||
<text><tspan font-family="sans" >v0.6.0</tspan></text>
|
<text><tspan font-family="sans" >v0.6.0</tspan></text>
|
||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
@@ -706,7 +873,11 @@
|
|||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
<g fill="none" color="black" stroke="currentColor" stroke-width="2.00" stroke-linecap="butt" stroke-linejoin="miter">
|
<g fill="none" color="black" stroke="currentColor" stroke-width="2.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
<path stroke='rgb( 37, 99, 235)' d='M1145.60,518.25 L1184.61,518.25 M829.14,548.94 '/> <use xlink:href='#gpPt6' transform='translate(829.14,548.94) scale(4.12)' color='rgb( 37, 99, 235)'/>
|
<path stroke='rgb( 37, 99, 235)' d='M1145.60,518.25 L1184.61,518.25 M658.79,746.22 L743.97,759.20 L829.14,772.18 L914.32,590.47 L999.49,652.77 '/> <use xlink:href='#gpPt6' transform='translate(658.79,746.22) scale(4.12)' color='rgb( 37, 99, 235)'/>
|
||||||
|
<use xlink:href='#gpPt6' transform='translate(743.97,759.20) scale(4.12)' color='rgb( 37, 99, 235)'/>
|
||||||
|
<use xlink:href='#gpPt6' transform='translate(829.14,772.18) scale(4.12)' color='rgb( 37, 99, 235)'/>
|
||||||
|
<use xlink:href='#gpPt6' transform='translate(914.32,590.47) scale(4.12)' color='rgb( 37, 99, 235)'/>
|
||||||
|
<use xlink:href='#gpPt6' transform='translate(999.49,652.77) scale(4.12)' color='rgb( 37, 99, 235)'/>
|
||||||
<use xlink:href='#gpPt6' transform='translate(1165.10,518.25) scale(4.12)' color='rgb( 37, 99, 235)'/>
|
<use xlink:href='#gpPt6' transform='translate(1165.10,518.25) scale(4.12)' color='rgb( 37, 99, 235)'/>
|
||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
@@ -717,7 +888,11 @@
|
|||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
<g fill="none" color="black" stroke="currentColor" stroke-width="2.00" stroke-linecap="butt" stroke-linejoin="miter">
|
<g fill="none" color="black" stroke="currentColor" stroke-width="2.00" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
<path stroke='rgb( 22, 163, 74)' d='M1145.60,534.75 L1184.61,534.75 M829.14,689.11 '/> <use xlink:href='#gpPt8' transform='translate(829.14,689.11) scale(4.12)' color='rgb( 22, 163, 74)'/>
|
<path stroke='rgb( 22, 163, 74)' d='M1145.60,534.75 L1184.61,534.75 M658.79,790.35 L743.97,759.20 L829.14,782.56 L914.32,522.98 L999.49,746.22 '/> <use xlink:href='#gpPt8' transform='translate(658.79,790.35) scale(4.12)' color='rgb( 22, 163, 74)'/>
|
||||||
|
<use xlink:href='#gpPt8' transform='translate(743.97,759.20) scale(4.12)' color='rgb( 22, 163, 74)'/>
|
||||||
|
<use xlink:href='#gpPt8' transform='translate(829.14,782.56) scale(4.12)' color='rgb( 22, 163, 74)'/>
|
||||||
|
<use xlink:href='#gpPt8' transform='translate(914.32,522.98) scale(4.12)' color='rgb( 22, 163, 74)'/>
|
||||||
|
<use xlink:href='#gpPt8' transform='translate(999.49,746.22) scale(4.12)' color='rgb( 22, 163, 74)'/>
|
||||||
<use xlink:href='#gpPt8' transform='translate(1165.10,534.75) scale(4.12)' color='rgb( 22, 163, 74)'/>
|
<use xlink:href='#gpPt8' transform='translate(1165.10,534.75) scale(4.12)' color='rgb( 22, 163, 74)'/>
|
||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
@@ -730,7 +905,11 @@
|
|||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
<g fill="none" color="black" stroke="currentColor" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
<g fill="none" color="black" stroke="currentColor" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
<path stroke='rgb(234, 88, 12)' stroke-dasharray='3.8,6.0' d='M1145.60,551.25 L1184.61,551.25 M829.14,825.40 '/> <use xlink:href='#gpPt4' transform='translate(829.14,825.40) scale(3.30)' color='rgb(234, 88, 12)'/>
|
<path stroke='rgb(234, 88, 12)' stroke-dasharray='3.8,6.0' d='M1145.60,551.25 L1184.61,551.25 M658.79,834.48 L743.97,831.89 L829.14,834.48 L914.32,839.67 L999.49,837.08 '/> <use xlink:href='#gpPt4' transform='translate(658.79,834.48) scale(3.30)' color='rgb(234, 88, 12)'/>
|
||||||
|
<use xlink:href='#gpPt4' transform='translate(743.97,831.89) scale(3.30)' color='rgb(234, 88, 12)'/>
|
||||||
|
<use xlink:href='#gpPt4' transform='translate(829.14,834.48) scale(3.30)' color='rgb(234, 88, 12)'/>
|
||||||
|
<use xlink:href='#gpPt4' transform='translate(914.32,839.67) scale(3.30)' color='rgb(234, 88, 12)'/>
|
||||||
|
<use xlink:href='#gpPt4' transform='translate(999.49,837.08) scale(3.30)' color='rgb(234, 88, 12)'/>
|
||||||
<use xlink:href='#gpPt4' transform='translate(1165.10,551.25) scale(3.30)' color='rgb(234, 88, 12)'/>
|
<use xlink:href='#gpPt4' transform='translate(1165.10,551.25) scale(3.30)' color='rgb(234, 88, 12)'/>
|
||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
@@ -741,7 +920,11 @@
|
|||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
<g fill="none" color="black" stroke="currentColor" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
<g fill="none" color="black" stroke="currentColor" stroke-width="1.50" stroke-linecap="butt" stroke-linejoin="miter">
|
||||||
<path stroke='rgb(220, 38, 38)' stroke-dasharray='3.8,6.0' d='M1145.60,567.75 L1184.61,567.75 M829.14,837.08 '/> <use xlink:href='#gpPt3' transform='translate(829.14,837.08) scale(3.30)' color='rgb(220, 38, 38)'/>
|
<path stroke='rgb(220, 38, 38)' stroke-dasharray='3.8,6.0' d='M1145.60,567.75 L1184.61,567.75 M658.79,839.67 L743.97,844.86 L829.14,839.67 L914.32,839.67 L999.49,844.86 '/> <use xlink:href='#gpPt3' transform='translate(658.79,839.67) scale(3.30)' color='rgb(220, 38, 38)'/>
|
||||||
|
<use xlink:href='#gpPt3' transform='translate(743.97,844.86) scale(3.30)' color='rgb(220, 38, 38)'/>
|
||||||
|
<use xlink:href='#gpPt3' transform='translate(829.14,839.67) scale(3.30)' color='rgb(220, 38, 38)'/>
|
||||||
|
<use xlink:href='#gpPt3' transform='translate(914.32,839.67) scale(3.30)' color='rgb(220, 38, 38)'/>
|
||||||
|
<use xlink:href='#gpPt3' transform='translate(999.49,844.86) scale(3.30)' color='rgb(220, 38, 38)'/>
|
||||||
<use xlink:href='#gpPt3' transform='translate(1165.10,567.75) scale(3.30)' color='rgb(220, 38, 38)'/>
|
<use xlink:href='#gpPt3' transform='translate(1165.10,567.75) scale(3.30)' color='rgb(220, 38, 38)'/>
|
||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 55 KiB After Width: | Height: | Size: 71 KiB |
@@ -1,5 +1,5 @@
|
|||||||
{"timestamp":"2026-03-18T21:35:03Z","machine_id":"agent","git_tag":"v0.6.0","git_commit":"7b337d9","runs":3,"versions":{"parrhesia":"0.6.0","strfry":"strfry 1.0.4 (nixpkgs)","nostr-rs-relay":"nostr-rs-relay 0.9.0","nostr-bench":"nostr-bench 0.4.0"},"servers":{"parrhesia-pg":{"connect_avg_ms":26.666666666666668,"connect_max_ms":45.333333333333336,"echo_tps":68100.33333333333,"echo_mibs":37.233333333333334,"event_tps":1647.3333333333333,"event_mibs":1.0666666666666667,"req_tps":3576.6666666666665,"req_mibs":18.833333333333332},"parrhesia-memory":{"connect_avg_ms":14.666666666666666,"connect_max_ms":24.333333333333332,"echo_tps":55978,"echo_mibs":30.633333333333336,"event_tps":882,"event_mibs":0.5666666666666668,"req_tps":6888,"req_mibs":36.06666666666666},"strfry":{"connect_avg_ms":3,"connect_max_ms":4.666666666666667,"echo_tps":67718.33333333333,"echo_mibs":37.86666666666667,"event_tps":3548.3333333333335,"event_mibs":2.3,"req_tps":1808,"req_mibs":11.699999999999998},"nostr-rs-relay":{"connect_avg_ms":2,"connect_max_ms":3.3333333333333335,"echo_tps":166178,"echo_mibs":91.03333333333335,"event_tps":787,"event_mibs":0.5,"req_tps":860.6666666666666,"req_mibs":2.4}}}
|
|
||||||
{"timestamp":"2026-03-18T22:14:37Z","machine_id":"agent","git_tag":"v0.2.0","git_commit":"b20dbf6","runs":3,"versions":{"parrhesia":"0.2.0","strfry":"strfry 1.0.4 (nixpkgs)","nostr-rs-relay":"nostr-rs-relay 0.9.0","nostr-bench":"nostr-bench 0.4.0"},"servers":{"parrhesia-pg":{"connect_avg_ms":14.666666666666666,"connect_max_ms":25.666666666666668,"echo_tps":77133,"echo_mibs":42.233333333333334,"event_tps":1602.6666666666667,"event_mibs":1.0666666666666667,"req_tps":2418,"req_mibs":12.5},"parrhesia-memory":{"connect_avg_ms":9,"connect_max_ms":16,"echo_tps":64218.333333333336,"echo_mibs":35.166666666666664,"event_tps":1578.3333333333333,"event_mibs":1,"req_tps":2431.3333333333335,"req_mibs":12.633333333333333},"strfry":{"connect_avg_ms":3.3333333333333335,"connect_max_ms":6,"echo_tps":63682.666666666664,"echo_mibs":35.6,"event_tps":3477.3333333333335,"event_mibs":2.2333333333333334,"req_tps":1804,"req_mibs":11.733333333333334},"nostr-rs-relay":{"connect_avg_ms":2.6666666666666665,"connect_max_ms":4.333333333333333,"echo_tps":160009,"echo_mibs":87.63333333333333,"event_tps":762,"event_mibs":0.4666666666666666,"req_tps":831,"req_mibs":2.2333333333333334}}}
|
{"timestamp":"2026-03-18T22:14:37Z","machine_id":"agent","git_tag":"v0.2.0","git_commit":"b20dbf6","runs":3,"versions":{"parrhesia":"0.2.0","strfry":"strfry 1.0.4 (nixpkgs)","nostr-rs-relay":"nostr-rs-relay 0.9.0","nostr-bench":"nostr-bench 0.4.0"},"servers":{"parrhesia-pg":{"connect_avg_ms":14.666666666666666,"connect_max_ms":25.666666666666668,"echo_tps":77133,"echo_mibs":42.233333333333334,"event_tps":1602.6666666666667,"event_mibs":1.0666666666666667,"req_tps":2418,"req_mibs":12.5},"parrhesia-memory":{"connect_avg_ms":9,"connect_max_ms":16,"echo_tps":64218.333333333336,"echo_mibs":35.166666666666664,"event_tps":1578.3333333333333,"event_mibs":1,"req_tps":2431.3333333333335,"req_mibs":12.633333333333333},"strfry":{"connect_avg_ms":3.3333333333333335,"connect_max_ms":6,"echo_tps":63682.666666666664,"echo_mibs":35.6,"event_tps":3477.3333333333335,"event_mibs":2.2333333333333334,"req_tps":1804,"req_mibs":11.733333333333334},"nostr-rs-relay":{"connect_avg_ms":2.6666666666666665,"connect_max_ms":4.333333333333333,"echo_tps":160009,"echo_mibs":87.63333333333333,"event_tps":762,"event_mibs":0.4666666666666666,"req_tps":831,"req_mibs":2.2333333333333334}}}
|
||||||
{"timestamp":"2026-03-18T22:22:12Z","machine_id":"agent","git_tag":"v0.3.0","git_commit":"8c8d5a8","runs":3,"versions":{"parrhesia":"0.3.0","strfry":"strfry 1.0.4 (nixpkgs)","nostr-rs-relay":"nostr-rs-relay 0.9.0","nostr-bench":"nostr-bench 0.4.0"},"servers":{"parrhesia-pg":{"connect_avg_ms":13,"connect_max_ms":21.666666666666668,"echo_tps":70703.33333333333,"echo_mibs":38.7,"event_tps":1970.6666666666667,"event_mibs":1.3,"req_tps":3614,"req_mibs":20.966666666666665},"parrhesia-memory":{"connect_avg_ms":13,"connect_max_ms":22.333333333333332,"echo_tps":60452.333333333336,"echo_mibs":33.1,"event_tps":1952.6666666666667,"event_mibs":1.3,"req_tps":3616,"req_mibs":20.766666666666666},"strfry":{"connect_avg_ms":3.6666666666666665,"connect_max_ms":6,"echo_tps":63128.666666666664,"echo_mibs":35.300000000000004,"event_tps":3442,"event_mibs":2.2333333333333334,"req_tps":1804,"req_mibs":11.699999999999998},"nostr-rs-relay":{"connect_avg_ms":2,"connect_max_ms":3.3333333333333335,"echo_tps":164995.33333333334,"echo_mibs":90.36666666666667,"event_tps":761.6666666666666,"event_mibs":0.5,"req_tps":846.3333333333334,"req_mibs":2.333333333333333}}}
|
{"timestamp":"2026-03-18T22:22:12Z","machine_id":"agent","git_tag":"v0.3.0","git_commit":"8c8d5a8","runs":3,"versions":{"parrhesia":"0.3.0","strfry":"strfry 1.0.4 (nixpkgs)","nostr-rs-relay":"nostr-rs-relay 0.9.0","nostr-bench":"nostr-bench 0.4.0"},"servers":{"parrhesia-pg":{"connect_avg_ms":13,"connect_max_ms":21.666666666666668,"echo_tps":70703.33333333333,"echo_mibs":38.7,"event_tps":1970.6666666666667,"event_mibs":1.3,"req_tps":3614,"req_mibs":20.966666666666665},"parrhesia-memory":{"connect_avg_ms":13,"connect_max_ms":22.333333333333332,"echo_tps":60452.333333333336,"echo_mibs":33.1,"event_tps":1952.6666666666667,"event_mibs":1.3,"req_tps":3616,"req_mibs":20.766666666666666},"strfry":{"connect_avg_ms":3.6666666666666665,"connect_max_ms":6,"echo_tps":63128.666666666664,"echo_mibs":35.300000000000004,"event_tps":3442,"event_mibs":2.2333333333333334,"req_tps":1804,"req_mibs":11.699999999999998},"nostr-rs-relay":{"connect_avg_ms":2,"connect_max_ms":3.3333333333333335,"echo_tps":164995.33333333334,"echo_mibs":90.36666666666667,"event_tps":761.6666666666666,"event_mibs":0.5,"req_tps":846.3333333333334,"req_mibs":2.333333333333333}}}
|
||||||
{"timestamp":"2026-03-18T22:30:08Z","machine_id":"agent","git_tag":"v0.4.0","git_commit":"b86b5db","runs":3,"versions":{"parrhesia":"0.4.0","strfry":"strfry 1.0.4 (nixpkgs)","nostr-rs-relay":"nostr-rs-relay 0.9.0","nostr-bench":"nostr-bench 0.4.0"},"servers":{"parrhesia-pg":{"connect_avg_ms":11.333333333333334,"connect_max_ms":20.666666666666668,"echo_tps":69139.33333333333,"echo_mibs":37.833333333333336,"event_tps":1938.6666666666667,"event_mibs":1.3,"req_tps":4619.666666666667,"req_mibs":26.266666666666666},"parrhesia-memory":{"connect_avg_ms":10,"connect_max_ms":17.333333333333332,"echo_tps":62715.333333333336,"echo_mibs":34.333333333333336,"event_tps":1573,"event_mibs":1.0333333333333334,"req_tps":4768,"req_mibs":23.733333333333334},"strfry":{"connect_avg_ms":3.3333333333333335,"connect_max_ms":6,"echo_tps":60956.666666666664,"echo_mibs":34.06666666666667,"event_tps":3380.6666666666665,"event_mibs":2.2,"req_tps":1820.3333333333333,"req_mibs":11.800000000000002},"nostr-rs-relay":{"connect_avg_ms":2.6666666666666665,"connect_max_ms":4.333333333333333,"echo_tps":161165.33333333334,"echo_mibs":88.26666666666665,"event_tps":768,"event_mibs":0.5,"req_tps":847.3333333333334,"req_mibs":2.3000000000000003}}}
|
{"timestamp":"2026-03-18T22:30:08Z","machine_id":"agent","git_tag":"v0.4.0","git_commit":"b86b5db","runs":3,"versions":{"parrhesia":"0.4.0","strfry":"strfry 1.0.4 (nixpkgs)","nostr-rs-relay":"nostr-rs-relay 0.9.0","nostr-bench":"nostr-bench 0.4.0"},"servers":{"parrhesia-pg":{"connect_avg_ms":11.333333333333334,"connect_max_ms":20.666666666666668,"echo_tps":69139.33333333333,"echo_mibs":37.833333333333336,"event_tps":1938.6666666666667,"event_mibs":1.3,"req_tps":4619.666666666667,"req_mibs":26.266666666666666},"parrhesia-memory":{"connect_avg_ms":10,"connect_max_ms":17.333333333333332,"echo_tps":62715.333333333336,"echo_mibs":34.333333333333336,"event_tps":1573,"event_mibs":1.0333333333333334,"req_tps":4768,"req_mibs":23.733333333333334},"strfry":{"connect_avg_ms":3.3333333333333335,"connect_max_ms":6,"echo_tps":60956.666666666664,"echo_mibs":34.06666666666667,"event_tps":3380.6666666666665,"event_mibs":2.2,"req_tps":1820.3333333333333,"req_mibs":11.800000000000002},"nostr-rs-relay":{"connect_avg_ms":2.6666666666666665,"connect_max_ms":4.333333333333333,"echo_tps":161165.33333333334,"echo_mibs":88.26666666666665,"event_tps":768,"event_mibs":0.5,"req_tps":847.3333333333334,"req_mibs":2.3000000000000003}}}
|
||||||
{"timestamp":"2026-03-18T22:36:37Z","machine_id":"agent","git_tag":"v0.5.0","git_commit":"e557eba","runs":3,"versions":{"parrhesia":"0.5.0","strfry":"strfry 1.0.4 (nixpkgs)","nostr-rs-relay":"nostr-rs-relay 0.9.0","nostr-bench":"nostr-bench 0.4.0"},"servers":{"parrhesia-pg":{"connect_avg_ms":34.666666666666664,"connect_max_ms":61.666666666666664,"echo_tps":72441,"echo_mibs":39.666666666666664,"event_tps":1897.3333333333333,"event_mibs":1.2333333333333334,"req_tps":13.333333333333334,"req_mibs":0.03333333333333333},"parrhesia-memory":{"connect_avg_ms":43.333333333333336,"connect_max_ms":74.66666666666667,"echo_tps":62704.666666666664,"echo_mibs":34.300000000000004,"event_tps":1370,"event_mibs":0.8666666666666667,"req_tps":47,"req_mibs":0.16666666666666666},"strfry":{"connect_avg_ms":2.6666666666666665,"connect_max_ms":4.666666666666667,"echo_tps":61189.333333333336,"echo_mibs":34.2,"event_tps":3426.6666666666665,"event_mibs":2.2,"req_tps":1811.3333333333333,"req_mibs":11.766666666666666},"nostr-rs-relay":{"connect_avg_ms":2.6666666666666665,"connect_max_ms":4,"echo_tps":152654.33333333334,"echo_mibs":83.63333333333333,"event_tps":772.6666666666666,"event_mibs":0.5,"req_tps":878.3333333333334,"req_mibs":2.4}}}
|
{"timestamp":"2026-03-18T22:36:37Z","machine_id":"agent","git_tag":"v0.5.0","git_commit":"e557eba","runs":3,"versions":{"parrhesia":"0.5.0","strfry":"strfry 1.0.4 (nixpkgs)","nostr-rs-relay":"nostr-rs-relay 0.9.0","nostr-bench":"nostr-bench 0.4.0"},"servers":{"parrhesia-pg":{"connect_avg_ms":34.666666666666664,"connect_max_ms":61.666666666666664,"echo_tps":72441,"echo_mibs":39.666666666666664,"event_tps":1897.3333333333333,"event_mibs":1.2333333333333334,"req_tps":13.333333333333334,"req_mibs":0.03333333333333333},"parrhesia-memory":{"connect_avg_ms":43.333333333333336,"connect_max_ms":74.66666666666667,"echo_tps":62704.666666666664,"echo_mibs":34.300000000000004,"event_tps":1370,"event_mibs":0.8666666666666667,"req_tps":47,"req_mibs":0.16666666666666666},"strfry":{"connect_avg_ms":2.6666666666666665,"connect_max_ms":4.666666666666667,"echo_tps":61189.333333333336,"echo_mibs":34.2,"event_tps":3426.6666666666665,"event_mibs":2.2,"req_tps":1811.3333333333333,"req_mibs":11.766666666666666},"nostr-rs-relay":{"connect_avg_ms":2.6666666666666665,"connect_max_ms":4,"echo_tps":152654.33333333334,"echo_mibs":83.63333333333333,"event_tps":772.6666666666666,"event_mibs":0.5,"req_tps":878.3333333333334,"req_mibs":2.4}}}
|
||||||
|
{"timestamp":"2026-03-18T21:35:03Z","machine_id":"agent","git_tag":"v0.6.0","git_commit":"7b337d9","runs":3,"versions":{"parrhesia":"0.6.0","strfry":"strfry 1.0.4 (nixpkgs)","nostr-rs-relay":"nostr-rs-relay 0.9.0","nostr-bench":"nostr-bench 0.4.0"},"servers":{"parrhesia-pg":{"connect_avg_ms":26.666666666666668,"connect_max_ms":45.333333333333336,"echo_tps":68100.33333333333,"echo_mibs":37.233333333333334,"event_tps":1647.3333333333333,"event_mibs":1.0666666666666667,"req_tps":3576.6666666666665,"req_mibs":18.833333333333332},"parrhesia-memory":{"connect_avg_ms":14.666666666666666,"connect_max_ms":24.333333333333332,"echo_tps":55978,"echo_mibs":30.633333333333336,"event_tps":882,"event_mibs":0.5666666666666668,"req_tps":6888,"req_mibs":36.06666666666666},"strfry":{"connect_avg_ms":3,"connect_max_ms":4.666666666666667,"echo_tps":67718.33333333333,"echo_mibs":37.86666666666667,"event_tps":3548.3333333333335,"event_mibs":2.3,"req_tps":1808,"req_mibs":11.699999999999998},"nostr-rs-relay":{"connect_avg_ms":2,"connect_max_ms":3.3333333333333335,"echo_tps":166178,"echo_mibs":91.03333333333335,"event_tps":787,"event_mibs":0.5,"req_tps":860.6666666666666,"req_mibs":2.4}}}
|
||||||
|
|||||||
12
mix.exs
12
mix.exs
@@ -26,7 +26,15 @@ defmodule Parrhesia.MixProject do
|
|||||||
defp elixirc_paths(_env), do: ["lib"]
|
defp elixirc_paths(_env), do: ["lib"]
|
||||||
|
|
||||||
def cli do
|
def cli do
|
||||||
[preferred_envs: [precommit: :test, bench: :test, "bench.update": :test]]
|
[
|
||||||
|
preferred_envs: [
|
||||||
|
precommit: :test,
|
||||||
|
bench: :test,
|
||||||
|
"bench.collect": :test,
|
||||||
|
"bench.update": :test,
|
||||||
|
"bench.at": :test
|
||||||
|
]
|
||||||
|
]
|
||||||
end
|
end
|
||||||
|
|
||||||
# Run "mix help deps" to learn about dependencies.
|
# Run "mix help deps" to learn about dependencies.
|
||||||
@@ -71,7 +79,9 @@ defmodule Parrhesia.MixProject do
|
|||||||
"test.node_sync_e2e": ["cmd ./scripts/run_node_sync_e2e.sh"],
|
"test.node_sync_e2e": ["cmd ./scripts/run_node_sync_e2e.sh"],
|
||||||
"test.node_sync_docker_e2e": ["cmd ./scripts/run_node_sync_docker_e2e.sh"],
|
"test.node_sync_docker_e2e": ["cmd ./scripts/run_node_sync_docker_e2e.sh"],
|
||||||
bench: ["cmd ./scripts/run_bench_compare.sh"],
|
bench: ["cmd ./scripts/run_bench_compare.sh"],
|
||||||
|
"bench.collect": ["cmd ./scripts/run_bench_collect.sh"],
|
||||||
"bench.update": ["cmd ./scripts/run_bench_update.sh"],
|
"bench.update": ["cmd ./scripts/run_bench_update.sh"],
|
||||||
|
"bench.at": ["cmd ./scripts/run_bench_at_ref.sh"],
|
||||||
# cov: ["cmd mix coveralls.lcov"],
|
# cov: ["cmd mix coveralls.lcov"],
|
||||||
lint: ["format --check-formatted", "credo"],
|
lint: ["format --check-formatted", "credo"],
|
||||||
precommit: [
|
precommit: [
|
||||||
|
|||||||
@@ -67,7 +67,7 @@ cd "$WORKTREE_DIR"
|
|||||||
# Always copy latest benchmark scripts to ensure consistency
|
# Always copy latest benchmark scripts to ensure consistency
|
||||||
echo "Copying latest benchmark infrastructure from current..."
|
echo "Copying latest benchmark infrastructure from current..."
|
||||||
mkdir -p scripts bench
|
mkdir -p scripts bench
|
||||||
cp "$ROOT_DIR/scripts/run_bench_update.sh" scripts/
|
cp "$ROOT_DIR/scripts/run_bench_collect.sh" scripts/
|
||||||
cp "$ROOT_DIR/scripts/run_bench_compare.sh" scripts/
|
cp "$ROOT_DIR/scripts/run_bench_compare.sh" scripts/
|
||||||
cp "$ROOT_DIR/scripts/run_nostr_bench.sh" scripts/
|
cp "$ROOT_DIR/scripts/run_nostr_bench.sh" scripts/
|
||||||
if [[ -f "$ROOT_DIR/scripts/run_nostr_bench_strfry.sh" ]]; then
|
if [[ -f "$ROOT_DIR/scripts/run_nostr_bench_strfry.sh" ]]; then
|
||||||
@@ -76,9 +76,6 @@ fi
|
|||||||
if [[ -f "$ROOT_DIR/scripts/run_nostr_bench_nostr_rs_relay.sh" ]]; then
|
if [[ -f "$ROOT_DIR/scripts/run_nostr_bench_nostr_rs_relay.sh" ]]; then
|
||||||
cp "$ROOT_DIR/scripts/run_nostr_bench_nostr_rs_relay.sh" scripts/
|
cp "$ROOT_DIR/scripts/run_nostr_bench_nostr_rs_relay.sh" scripts/
|
||||||
fi
|
fi
|
||||||
if [[ -f "$ROOT_DIR/bench/chart.gnuplot" ]]; then
|
|
||||||
cp "$ROOT_DIR/bench/chart.gnuplot" bench/
|
|
||||||
fi
|
|
||||||
echo
|
echo
|
||||||
|
|
||||||
echo "Installing dependencies..."
|
echo "Installing dependencies..."
|
||||||
@@ -90,11 +87,10 @@ echo
|
|||||||
|
|
||||||
RUNS="${PARRHESIA_BENCH_RUNS:-3}"
|
RUNS="${PARRHESIA_BENCH_RUNS:-3}"
|
||||||
|
|
||||||
# Run the benchmark update script which will append to history.jsonl
|
# Run the benchmark collect script which will append to history.jsonl
|
||||||
# Allow it to fail (e.g., README update might fail on old versions) but continue
|
|
||||||
PARRHESIA_BENCH_RUNS="$RUNS" \
|
PARRHESIA_BENCH_RUNS="$RUNS" \
|
||||||
PARRHESIA_BENCH_MACHINE_ID="${PARRHESIA_BENCH_MACHINE_ID:-}" \
|
PARRHESIA_BENCH_MACHINE_ID="${PARRHESIA_BENCH_MACHINE_ID:-}" \
|
||||||
./scripts/run_bench_update.sh || echo "Benchmark script exited with error (may be expected for old versions)"
|
./scripts/run_bench_collect.sh
|
||||||
|
|
||||||
# --- Copy results back -------------------------------------------------------
|
# --- Copy results back -------------------------------------------------------
|
||||||
|
|
||||||
|
|||||||
103
scripts/run_bench_collect.sh
Executable file
103
scripts/run_bench_collect.sh
Executable file
@@ -0,0 +1,103 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
||||||
|
cd "$ROOT_DIR"
|
||||||
|
|
||||||
|
usage() {
|
||||||
|
cat <<'EOF'
|
||||||
|
usage:
|
||||||
|
./scripts/run_bench_collect.sh
|
||||||
|
|
||||||
|
Runs the benchmark suite and appends results to bench/history.jsonl.
|
||||||
|
Does NOT update README.md or regenerate chart.svg.
|
||||||
|
|
||||||
|
Use run_bench_update.sh to update the chart and README from collected data.
|
||||||
|
|
||||||
|
Environment:
|
||||||
|
PARRHESIA_BENCH_RUNS Number of runs (default: 3)
|
||||||
|
PARRHESIA_BENCH_MACHINE_ID Machine identifier (default: hostname -s)
|
||||||
|
|
||||||
|
All PARRHESIA_BENCH_* knobs from run_bench_compare.sh are forwarded.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
# Collect benchmark data
|
||||||
|
./scripts/run_bench_collect.sh
|
||||||
|
|
||||||
|
# Later, update chart and README
|
||||||
|
./scripts/run_bench_update.sh
|
||||||
|
EOF
|
||||||
|
}
|
||||||
|
|
||||||
|
if [[ "${1:-}" == "-h" || "${1:-}" == "--help" ]]; then
|
||||||
|
usage
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
# --- Configuration -----------------------------------------------------------
|
||||||
|
|
||||||
|
BENCH_DIR="$ROOT_DIR/bench"
|
||||||
|
HISTORY_FILE="$BENCH_DIR/history.jsonl"
|
||||||
|
|
||||||
|
MACHINE_ID="${PARRHESIA_BENCH_MACHINE_ID:-$(hostname -s)}"
|
||||||
|
GIT_TAG="$(git describe --tags --abbrev=0 2>/dev/null || echo 'untagged')"
|
||||||
|
GIT_COMMIT="$(git rev-parse --short=7 HEAD)"
|
||||||
|
TIMESTAMP="$(date -u +%Y-%m-%dT%H:%M:%SZ)"
|
||||||
|
RUNS="${PARRHESIA_BENCH_RUNS:-3}"
|
||||||
|
|
||||||
|
mkdir -p "$BENCH_DIR"
|
||||||
|
|
||||||
|
WORK_DIR="$(mktemp -d)"
|
||||||
|
trap 'rm -rf "$WORK_DIR"' EXIT
|
||||||
|
|
||||||
|
JSON_OUT="$WORK_DIR/bench_summary.json"
|
||||||
|
RAW_OUTPUT="$WORK_DIR/bench_output.txt"
|
||||||
|
|
||||||
|
# --- Phase 1: Run benchmarks -------------------------------------------------
|
||||||
|
|
||||||
|
echo "Running ${RUNS}-run benchmark suite..."
|
||||||
|
|
||||||
|
PARRHESIA_BENCH_RUNS="$RUNS" \
|
||||||
|
BENCH_JSON_OUT="$JSON_OUT" \
|
||||||
|
./scripts/run_bench_compare.sh 2>&1 | tee "$RAW_OUTPUT"
|
||||||
|
|
||||||
|
if [[ ! -f "$JSON_OUT" ]]; then
|
||||||
|
echo "Benchmark JSON output not found at $JSON_OUT" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# --- Phase 2: Append to history ----------------------------------------------
|
||||||
|
|
||||||
|
echo "Appending to history..."
|
||||||
|
|
||||||
|
node - "$JSON_OUT" "$TIMESTAMP" "$MACHINE_ID" "$GIT_TAG" "$GIT_COMMIT" "$RUNS" "$HISTORY_FILE" <<'NODE'
|
||||||
|
const fs = require("node:fs");
|
||||||
|
|
||||||
|
const [, , jsonOut, timestamp, machineId, gitTag, gitCommit, runsStr, historyFile] = process.argv;
|
||||||
|
|
||||||
|
const { versions, ...servers } = JSON.parse(fs.readFileSync(jsonOut, "utf8"));
|
||||||
|
|
||||||
|
const entry = {
|
||||||
|
timestamp,
|
||||||
|
machine_id: machineId,
|
||||||
|
git_tag: gitTag,
|
||||||
|
git_commit: gitCommit,
|
||||||
|
runs: Number(runsStr),
|
||||||
|
versions: versions || {},
|
||||||
|
servers,
|
||||||
|
};
|
||||||
|
|
||||||
|
fs.appendFileSync(historyFile, JSON.stringify(entry) + "\n", "utf8");
|
||||||
|
console.log(" entry: " + gitTag + " (" + gitCommit + ") on " + machineId);
|
||||||
|
NODE
|
||||||
|
|
||||||
|
# --- Done ---------------------------------------------------------------------
|
||||||
|
|
||||||
|
echo
|
||||||
|
echo "Benchmark data collected and appended to $HISTORY_FILE"
|
||||||
|
echo
|
||||||
|
echo "To update chart and README with collected data:"
|
||||||
|
echo " ./scripts/run_bench_update.sh"
|
||||||
|
echo
|
||||||
|
echo "To update for a specific machine:"
|
||||||
|
echo " ./scripts/run_bench_update.sh <machine_id>"
|
||||||
@@ -7,18 +7,25 @@ cd "$ROOT_DIR"
|
|||||||
usage() {
|
usage() {
|
||||||
cat <<'EOF'
|
cat <<'EOF'
|
||||||
usage:
|
usage:
|
||||||
|
./scripts/run_bench_update.sh [machine_id]
|
||||||
|
|
||||||
|
Regenerates bench/chart.svg and updates the benchmark table in README.md
|
||||||
|
from collected data in bench/history.jsonl.
|
||||||
|
|
||||||
|
Arguments:
|
||||||
|
machine_id Optional. Filter to a specific machine's data.
|
||||||
|
Default: current machine (hostname -s)
|
||||||
|
Use "all" to include all machines (will use latest entry per tag)
|
||||||
|
|
||||||
|
Examples:
|
||||||
|
# Update chart for current machine
|
||||||
./scripts/run_bench_update.sh
|
./scripts/run_bench_update.sh
|
||||||
|
|
||||||
Runs the benchmark suite (3 runs by default), then:
|
# Update chart for specific machine
|
||||||
1) Appends structured results to bench/history.jsonl
|
./scripts/run_bench_update.sh my-server
|
||||||
2) Generates bench/chart.svg via gnuplot
|
|
||||||
3) Updates the comparison table in README.md
|
|
||||||
|
|
||||||
Environment:
|
# Update chart using all machines (latest entry per tag wins)
|
||||||
PARRHESIA_BENCH_RUNS Number of runs (default: 3)
|
./scripts/run_bench_update.sh all
|
||||||
PARRHESIA_BENCH_MACHINE_ID Machine identifier (default: hostname -s)
|
|
||||||
|
|
||||||
All PARRHESIA_BENCH_* knobs from run_bench_compare.sh are forwarded.
|
|
||||||
EOF
|
EOF
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -34,61 +41,20 @@ HISTORY_FILE="$BENCH_DIR/history.jsonl"
|
|||||||
CHART_FILE="$BENCH_DIR/chart.svg"
|
CHART_FILE="$BENCH_DIR/chart.svg"
|
||||||
GNUPLOT_TEMPLATE="$BENCH_DIR/chart.gnuplot"
|
GNUPLOT_TEMPLATE="$BENCH_DIR/chart.gnuplot"
|
||||||
|
|
||||||
MACHINE_ID="${PARRHESIA_BENCH_MACHINE_ID:-$(hostname -s)}"
|
MACHINE_ID="${1:-$(hostname -s)}"
|
||||||
GIT_TAG="$(git describe --tags --abbrev=0 2>/dev/null || echo 'untagged')"
|
|
||||||
GIT_COMMIT="$(git rev-parse --short=7 HEAD)"
|
|
||||||
TIMESTAMP="$(date -u +%Y-%m-%dT%H:%M:%SZ)"
|
|
||||||
RUNS="${PARRHESIA_BENCH_RUNS:-3}"
|
|
||||||
|
|
||||||
mkdir -p "$BENCH_DIR"
|
if [[ ! -f "$HISTORY_FILE" ]]; then
|
||||||
|
echo "Error: No history file found at $HISTORY_FILE" >&2
|
||||||
|
echo "Run ./scripts/run_bench_collect.sh first to collect benchmark data" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
WORK_DIR="$(mktemp -d)"
|
WORK_DIR="$(mktemp -d)"
|
||||||
trap 'rm -rf "$WORK_DIR"' EXIT
|
trap 'rm -rf "$WORK_DIR"' EXIT
|
||||||
|
|
||||||
JSON_OUT="$WORK_DIR/bench_summary.json"
|
# --- Generate chart ----------------------------------------------------------
|
||||||
RAW_OUTPUT="$WORK_DIR/bench_output.txt"
|
|
||||||
|
|
||||||
# --- Phase 1: Run benchmarks -------------------------------------------------
|
echo "Generating chart for machine: $MACHINE_ID"
|
||||||
|
|
||||||
echo "Running ${RUNS}-run benchmark suite..."
|
|
||||||
|
|
||||||
PARRHESIA_BENCH_RUNS="$RUNS" \
|
|
||||||
BENCH_JSON_OUT="$JSON_OUT" \
|
|
||||||
./scripts/run_bench_compare.sh 2>&1 | tee "$RAW_OUTPUT"
|
|
||||||
|
|
||||||
if [[ ! -f "$JSON_OUT" ]]; then
|
|
||||||
echo "Benchmark JSON output not found at $JSON_OUT" >&2
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# --- Phase 2: Append to history ----------------------------------------------
|
|
||||||
|
|
||||||
echo "Appending to history..."
|
|
||||||
|
|
||||||
node - "$JSON_OUT" "$TIMESTAMP" "$MACHINE_ID" "$GIT_TAG" "$GIT_COMMIT" "$RUNS" "$HISTORY_FILE" <<'NODE'
|
|
||||||
const fs = require("node:fs");
|
|
||||||
|
|
||||||
const [, , jsonOut, timestamp, machineId, gitTag, gitCommit, runsStr, historyFile] = process.argv;
|
|
||||||
|
|
||||||
const { versions, ...servers } = JSON.parse(fs.readFileSync(jsonOut, "utf8"));
|
|
||||||
|
|
||||||
const entry = {
|
|
||||||
timestamp,
|
|
||||||
machine_id: machineId,
|
|
||||||
git_tag: gitTag,
|
|
||||||
git_commit: gitCommit,
|
|
||||||
runs: Number(runsStr),
|
|
||||||
versions: versions || {},
|
|
||||||
servers,
|
|
||||||
};
|
|
||||||
|
|
||||||
fs.appendFileSync(historyFile, JSON.stringify(entry) + "\n", "utf8");
|
|
||||||
console.log(" entry: " + gitTag + " (" + gitCommit + ") on " + machineId);
|
|
||||||
NODE
|
|
||||||
|
|
||||||
# --- Phase 3: Generate chart --------------------------------------------------
|
|
||||||
|
|
||||||
echo "Generating chart..."
|
|
||||||
|
|
||||||
node - "$HISTORY_FILE" "$MACHINE_ID" "$WORK_DIR" <<'NODE'
|
node - "$HISTORY_FILE" "$MACHINE_ID" "$WORK_DIR" <<'NODE'
|
||||||
const fs = require("node:fs");
|
const fs = require("node:fs");
|
||||||
@@ -106,15 +72,23 @@ const lines = fs.readFileSync(historyFile, "utf8")
|
|||||||
.filter(l => l.trim().length > 0)
|
.filter(l => l.trim().length > 0)
|
||||||
.map(l => JSON.parse(l));
|
.map(l => JSON.parse(l));
|
||||||
|
|
||||||
// Filter to current machine
|
// Filter to selected machine(s)
|
||||||
const entries = lines.filter(e => e.machine_id === machineId);
|
let entries;
|
||||||
|
if (machineId === "all") {
|
||||||
|
entries = lines;
|
||||||
|
console.log(" using all machines");
|
||||||
|
} else {
|
||||||
|
entries = lines.filter(e => e.machine_id === machineId);
|
||||||
|
console.log(" filtered to machine: " + machineId);
|
||||||
|
}
|
||||||
|
|
||||||
if (entries.length === 0) {
|
if (entries.length === 0) {
|
||||||
console.log(" no history entries for machine '" + machineId + "', skipping chart");
|
console.log(" no history entries for machine '" + machineId + "', skipping chart");
|
||||||
process.exit(0);
|
process.exit(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Sort chronologically, deduplicate by tag (latest wins)
|
// Sort chronologically, deduplicate by tag (latest wins),
|
||||||
|
// then order the resulting series by git tag.
|
||||||
entries.sort((a, b) => a.timestamp.localeCompare(b.timestamp));
|
entries.sort((a, b) => a.timestamp.localeCompare(b.timestamp));
|
||||||
const byTag = new Map();
|
const byTag = new Map();
|
||||||
for (const e of entries) {
|
for (const e of entries) {
|
||||||
@@ -122,6 +96,22 @@ for (const e of entries) {
|
|||||||
}
|
}
|
||||||
const deduped = [...byTag.values()];
|
const deduped = [...byTag.values()];
|
||||||
|
|
||||||
|
function parseSemverTag(tag) {
|
||||||
|
const match = /^v?(\d+)\.(\d+)\.(\d+)$/.exec(tag);
|
||||||
|
return match ? match.slice(1).map(Number) : null;
|
||||||
|
}
|
||||||
|
|
||||||
|
deduped.sort((a, b) => {
|
||||||
|
const aTag = parseSemverTag(a.git_tag);
|
||||||
|
const bTag = parseSemverTag(b.git_tag);
|
||||||
|
|
||||||
|
if (aTag && bTag) {
|
||||||
|
return aTag[0] - bTag[0] || aTag[1] - bTag[1] || aTag[2] - bTag[2];
|
||||||
|
}
|
||||||
|
|
||||||
|
return a.git_tag.localeCompare(b.git_tag, undefined, { numeric: true });
|
||||||
|
});
|
||||||
|
|
||||||
// Determine which non-parrhesia servers are present
|
// Determine which non-parrhesia servers are present
|
||||||
const baselineServerNames = ["strfry", "nostr-rs-relay"];
|
const baselineServerNames = ["strfry", "nostr-rs-relay"];
|
||||||
const presentBaselines = baselineServerNames.filter(srv =>
|
const presentBaselines = baselineServerNames.filter(srv =>
|
||||||
@@ -196,25 +186,68 @@ if [[ -f "$WORK_DIR/plot_commands.gnuplot" ]]; then
|
|||||||
echo " chart written to $CHART_FILE"
|
echo " chart written to $CHART_FILE"
|
||||||
else
|
else
|
||||||
echo " chart generation skipped (no data for this machine)"
|
echo " chart generation skipped (no data for this machine)"
|
||||||
|
exit 0
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# --- Phase 4: Update README.md -----------------------------------------------
|
# --- Update README.md -------------------------------------------------------
|
||||||
|
|
||||||
echo "Updating README.md..."
|
echo "Updating README.md with latest benchmark..."
|
||||||
|
|
||||||
node - "$JSON_OUT" "$ROOT_DIR/README.md" <<'NODE'
|
# Find the most recent entry for this machine
|
||||||
|
LATEST_ENTRY=$(node - "$HISTORY_FILE" "$MACHINE_ID" <<'NODE'
|
||||||
|
const fs = require("node:fs");
|
||||||
|
const [, , historyFile, machineId] = process.argv;
|
||||||
|
|
||||||
|
const lines = fs.readFileSync(historyFile, "utf8")
|
||||||
|
.split("\n")
|
||||||
|
.filter(l => l.trim().length > 0)
|
||||||
|
.map(l => JSON.parse(l));
|
||||||
|
|
||||||
|
let entries;
|
||||||
|
if (machineId === "all") {
|
||||||
|
entries = lines;
|
||||||
|
} else {
|
||||||
|
entries = lines.filter(e => e.machine_id === machineId);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (entries.length === 0) {
|
||||||
|
console.error("No entries found for machine: " + machineId);
|
||||||
|
process.exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get latest entry
|
||||||
|
entries.sort((a, b) => b.timestamp.localeCompare(a.timestamp));
|
||||||
|
console.log(JSON.stringify(entries[0]));
|
||||||
|
NODE
|
||||||
|
)
|
||||||
|
|
||||||
|
if [[ -z "$LATEST_ENTRY" ]]; then
|
||||||
|
echo "Warning: Could not find latest entry, skipping README update" >&2
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
node - "$LATEST_ENTRY" "$ROOT_DIR/README.md" <<'NODE'
|
||||||
const fs = require("node:fs");
|
const fs = require("node:fs");
|
||||||
|
|
||||||
const [, , jsonOut, readmePath] = process.argv;
|
const [, , entryJson, readmePath] = process.argv;
|
||||||
|
|
||||||
const { versions, ...servers } = JSON.parse(fs.readFileSync(jsonOut, "utf8"));
|
const entry = JSON.parse(entryJson);
|
||||||
const readme = fs.readFileSync(readmePath, "utf8");
|
const servers = entry.servers || {};
|
||||||
|
|
||||||
const pg = servers["parrhesia-pg"];
|
const pg = servers["parrhesia-pg"];
|
||||||
const mem = servers["parrhesia-memory"];
|
const mem = servers["parrhesia-memory"];
|
||||||
const strfry = servers["strfry"];
|
const strfry = servers["strfry"];
|
||||||
const nostrRs = servers["nostr-rs-relay"];
|
const nostrRs = servers["nostr-rs-relay"];
|
||||||
|
|
||||||
|
if (!pg || !mem) {
|
||||||
|
const present = Object.keys(servers).sort().join(", ") || "(none)";
|
||||||
|
console.error(
|
||||||
|
"Latest benchmark entry must include parrhesia-pg and parrhesia-memory. Present servers: " +
|
||||||
|
present
|
||||||
|
);
|
||||||
|
process.exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
function toFixed(v, d = 2) {
|
function toFixed(v, d = 2) {
|
||||||
return Number.isFinite(v) ? v.toFixed(d) : "n/a";
|
return Number.isFinite(v) ? v.toFixed(d) : "n/a";
|
||||||
}
|
}
|
||||||
@@ -232,14 +265,14 @@ function boldIf(ratioStr, lowerIsBetter) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const metricRows = [
|
const metricRows = [
|
||||||
["connect avg latency (ms) \u2193", "connect_avg_ms", true],
|
["connect avg latency (ms) ↓", "connect_avg_ms", true],
|
||||||
["connect max latency (ms) \u2193", "connect_max_ms", true],
|
["connect max latency (ms) ↓", "connect_max_ms", true],
|
||||||
["echo throughput (TPS) \u2191", "echo_tps", false],
|
["echo throughput (TPS) ↑", "echo_tps", false],
|
||||||
["echo throughput (MiB/s) \u2191", "echo_mibs", false],
|
["echo throughput (MiB/s) ↑", "echo_mibs", false],
|
||||||
["event throughput (TPS) \u2191", "event_tps", false],
|
["event throughput (TPS) ↑", "event_tps", false],
|
||||||
["event throughput (MiB/s) \u2191", "event_mibs", false],
|
["event throughput (MiB/s) ↑", "event_mibs", false],
|
||||||
["req throughput (TPS) \u2191", "req_tps", false],
|
["req throughput (TPS) ↑", "req_tps", false],
|
||||||
["req throughput (MiB/s) \u2191", "req_mibs", false],
|
["req throughput (MiB/s) ↑", "req_mibs", false],
|
||||||
];
|
];
|
||||||
|
|
||||||
const hasStrfry = !!strfry;
|
const hasStrfry = !!strfry;
|
||||||
@@ -275,6 +308,7 @@ const tableLines = [
|
|||||||
];
|
];
|
||||||
|
|
||||||
// Replace the first markdown table in the ## Benchmark section
|
// Replace the first markdown table in the ## Benchmark section
|
||||||
|
const readme = fs.readFileSync(readmePath, "utf8");
|
||||||
const readmeLines = readme.split("\n");
|
const readmeLines = readme.split("\n");
|
||||||
const benchIdx = readmeLines.findIndex(l => /^## Benchmark/.test(l));
|
const benchIdx = readmeLines.findIndex(l => /^## Benchmark/.test(l));
|
||||||
if (benchIdx === -1) {
|
if (benchIdx === -1) {
|
||||||
@@ -309,8 +343,7 @@ NODE
|
|||||||
# --- Done ---------------------------------------------------------------------
|
# --- Done ---------------------------------------------------------------------
|
||||||
|
|
||||||
echo
|
echo
|
||||||
echo "Benchmark update complete. Files changed:"
|
echo "Benchmark rendering complete. Files updated:"
|
||||||
echo " $HISTORY_FILE"
|
|
||||||
echo " $CHART_FILE"
|
echo " $CHART_FILE"
|
||||||
echo " $ROOT_DIR/README.md"
|
echo " $ROOT_DIR/README.md"
|
||||||
echo
|
echo
|
||||||
|
|||||||
Reference in New Issue
Block a user