Merge pull request #2212 from mempool/nymkappa/feature/node-network-stack
Convert nodes per network chart to stack style
This commit is contained in:
		
						commit
						cfa2690549
					
				| @ -6,7 +6,7 @@ class StatisticsApi { | |||||||
|   public async $getStatistics(interval: string | null = null): Promise<any> { |   public async $getStatistics(interval: string | null = null): Promise<any> { | ||||||
|     interval = Common.getSqlInterval(interval); |     interval = Common.getSqlInterval(interval); | ||||||
| 
 | 
 | ||||||
|     let query = `SELECT UNIX_TIMESTAMP(added) AS added, channel_count, node_count, total_capacity, tor_nodes, clearnet_nodes, unannounced_nodes
 |     let query = `SELECT UNIX_TIMESTAMP(added) AS added, channel_count, total_capacity, tor_nodes, clearnet_nodes, unannounced_nodes
 | ||||||
|       FROM lightning_stats`;
 |       FROM lightning_stats`;
 | ||||||
| 
 | 
 | ||||||
|     if (interval) { |     if (interval) { | ||||||
|  | |||||||
| @ -83,7 +83,6 @@ export class NodesNetworksChartComponent implements OnInit { | |||||||
|               tap((response) => { |               tap((response) => { | ||||||
|                 const data = response.body; |                 const data = response.body; | ||||||
|                 this.prepareChartOptions({ |                 this.prepareChartOptions({ | ||||||
|                   node_count: data.map(val => [val.added * 1000, val.node_count]),  |  | ||||||
|                   tor_nodes: data.map(val => [val.added * 1000, val.tor_nodes]), |                   tor_nodes: data.map(val => [val.added * 1000, val.tor_nodes]), | ||||||
|                   clearnet_nodes: data.map(val => [val.added * 1000, val.clearnet_nodes]), |                   clearnet_nodes: data.map(val => [val.added * 1000, val.clearnet_nodes]), | ||||||
|                   unannounced_nodes: data.map(val => [val.added * 1000, val.unannounced_nodes]), |                   unannounced_nodes: data.map(val => [val.added * 1000, val.unannounced_nodes]), | ||||||
| @ -103,7 +102,7 @@ export class NodesNetworksChartComponent implements OnInit { | |||||||
| 
 | 
 | ||||||
|   prepareChartOptions(data) { |   prepareChartOptions(data) { | ||||||
|     let title: object; |     let title: object; | ||||||
|     if (data.node_count.length === 0) { |     if (data.tor_nodes.length === 0) { | ||||||
|       title = { |       title = { | ||||||
|         textStyle: { |         textStyle: { | ||||||
|           color: 'grey', |           color: 'grey', | ||||||
| @ -145,33 +144,34 @@ export class NodesNetworksChartComponent implements OnInit { | |||||||
|         }, |         }, | ||||||
|         borderColor: '#000', |         borderColor: '#000', | ||||||
|         formatter: (ticks) => { |         formatter: (ticks) => { | ||||||
|  |           let total = 0; | ||||||
|           const date = new Date(ticks[0].data[0]).toLocaleDateString(this.locale, { year: 'numeric', month: 'short', day: 'numeric' }); |           const date = new Date(ticks[0].data[0]).toLocaleDateString(this.locale, { year: 'numeric', month: 'short', day: 'numeric' }); | ||||||
|           let tooltip = `<b style="color: white; margin-left: 2px">${date}</b><br>`; |           let tooltip = `<b style="color: white; margin-left: 2px">${date}</b><br>`; | ||||||
| 
 | 
 | ||||||
|           for (const tick of ticks) { |           for (const tick of ticks.reverse()) { | ||||||
|             if (tick.seriesIndex === 0) { // Total
 |             if (tick.seriesIndex === 0) { // Tor
 | ||||||
|               tooltip += `${tick.marker} ${tick.seriesName}: ${formatNumber(tick.data[1], this.locale, '1.0-0')}`; |               tooltip += `${tick.marker} ${tick.seriesName}: ${formatNumber(tick.data[1], this.locale, '1.0-0')}`; | ||||||
|             } else if (tick.seriesIndex === 1) { // Tor
 |             } else if (tick.seriesIndex === 1) { // Clearnet
 | ||||||
|               tooltip += `${tick.marker} ${tick.seriesName}: ${formatNumber(tick.data[1], this.locale, '1.0-0')}`; |               tooltip += `${tick.marker} ${tick.seriesName}: ${formatNumber(tick.data[1], this.locale, '1.0-0')}`; | ||||||
|             } else if (tick.seriesIndex === 2) { // Clearnet
 |             } else if (tick.seriesIndex === 2) { // Unannounced
 | ||||||
|               tooltip += `${tick.marker} ${tick.seriesName}: ${formatNumber(tick.data[1], this.locale, '1.0-0')}`; |  | ||||||
|             } else if (tick.seriesIndex === 3) { // Unannounced
 |  | ||||||
|               tooltip += `${tick.marker} ${tick.seriesName}: ${formatNumber(tick.data[1], this.locale, '1.0-0')}`; |               tooltip += `${tick.marker} ${tick.seriesName}: ${formatNumber(tick.data[1], this.locale, '1.0-0')}`; | ||||||
|             } |             } | ||||||
|             tooltip += `<br>`; |             tooltip += `<br>`; | ||||||
|  |             total += tick.data[1]; | ||||||
|           } |           } | ||||||
|  |           tooltip += `<b>Total:</b> ${formatNumber(total, this.locale, '1.0-0')} nodes`; | ||||||
| 
 | 
 | ||||||
|           return tooltip; |           return tooltip; | ||||||
|         } |         } | ||||||
|       }, |       }, | ||||||
|       xAxis: data.node_count.length === 0 ? undefined : { |       xAxis: data.tor_nodes.length === 0 ? undefined : { | ||||||
|         type: 'time', |         type: 'time', | ||||||
|         splitNumber: (this.isMobile() || this.widget) ? 5 : 10, |         splitNumber: (this.isMobile() || this.widget) ? 5 : 10, | ||||||
|         axisLabel: { |         axisLabel: { | ||||||
|           hideOverlap: true, |           hideOverlap: true, | ||||||
|         } |         } | ||||||
|       }, |       }, | ||||||
|       legend: data.node_count.length === 0 ? undefined : { |       legend: data.tor_nodes.length === 0 ? undefined : { | ||||||
|         padding: 10, |         padding: 10, | ||||||
|         data: [ |         data: [ | ||||||
|           { |           { | ||||||
| @ -214,7 +214,7 @@ export class NodesNetworksChartComponent implements OnInit { | |||||||
|           'Unannounced': true, |           'Unannounced': true, | ||||||
|         } |         } | ||||||
|       }, |       }, | ||||||
|       yAxis: data.node_count.length === 0 ? undefined : [ |       yAxis: data.tor_nodes.length === 0 ? undefined : [ | ||||||
|         { |         { | ||||||
|           type: 'value', |           type: 'value', | ||||||
|           position: 'left', |           position: 'left', | ||||||
| @ -236,45 +236,23 @@ export class NodesNetworksChartComponent implements OnInit { | |||||||
|           }, |           }, | ||||||
|         } |         } | ||||||
|       ], |       ], | ||||||
|       series: data.node_count.length === 0 ? [] : [ |       series: data.tor_nodes.length === 0 ? [] : [ | ||||||
|         { |  | ||||||
|           zlevel: 1, |  | ||||||
|           name: $localize`Total`, |  | ||||||
|           showSymbol: false, |  | ||||||
|           symbol: 'none', |  | ||||||
|           data: data.node_count, |  | ||||||
|           type: 'line', |  | ||||||
|           lineStyle: { |  | ||||||
|             width: 2, |  | ||||||
|           }, |  | ||||||
|           markLine: { |  | ||||||
|             silent: true, |  | ||||||
|             symbol: 'none', |  | ||||||
|             lineStyle: { |  | ||||||
|               type: 'solid', |  | ||||||
|               color: '#ffffff66', |  | ||||||
|               opacity: 1, |  | ||||||
|               width: 1, |  | ||||||
|             }, |  | ||||||
|           }, |  | ||||||
|           areaStyle: { |  | ||||||
|             opacity: 0.25, |  | ||||||
|           }, |  | ||||||
|         }, |  | ||||||
|         { |         { | ||||||
|           zlevel: 1, |           zlevel: 1, | ||||||
|           yAxisIndex: 0, |           yAxisIndex: 0, | ||||||
|           name: $localize`Tor`, |           name: $localize`Unannounced`, | ||||||
|           showSymbol: false, |           showSymbol: false, | ||||||
|           symbol: 'none', |           symbol: 'none', | ||||||
|           data: data.tor_nodes, |           data: data.unannounced_nodes, | ||||||
|           type: 'line', |           type: 'line', | ||||||
|           lineStyle: { |           lineStyle: { | ||||||
|             width: 2, |             width: 2, | ||||||
|           }, |           }, | ||||||
|           areaStyle: { |           areaStyle: { | ||||||
|             opacity: 0.25, |             opacity: 0.5, | ||||||
|           }, |           }, | ||||||
|  |           stack: 'Total', | ||||||
|  |           color: '#FDD835', | ||||||
|         }, |         }, | ||||||
|         { |         { | ||||||
|           zlevel: 1, |           zlevel: 1, | ||||||
| @ -288,24 +266,28 @@ export class NodesNetworksChartComponent implements OnInit { | |||||||
|             width: 2, |             width: 2, | ||||||
|           }, |           }, | ||||||
|           areaStyle: { |           areaStyle: { | ||||||
|             opacity: 0.25, |             opacity: 0.5, | ||||||
|           }, |           }, | ||||||
|  |           stack: 'Total', | ||||||
|  |           color: '#00ACC1', | ||||||
|         }, |         }, | ||||||
|         { |         { | ||||||
|           zlevel: 1, |           zlevel: 1, | ||||||
|           yAxisIndex: 0, |           yAxisIndex: 0, | ||||||
|           name: $localize`Unannounced`, |           name: $localize`Tor`, | ||||||
|           showSymbol: false, |           showSymbol: false, | ||||||
|           symbol: 'none', |           symbol: 'none', | ||||||
|           data: data.unannounced_nodes, |           data: data.tor_nodes, | ||||||
|           type: 'line', |           type: 'line', | ||||||
|           lineStyle: { |           lineStyle: { | ||||||
|             width: 2, |             width: 2, | ||||||
|           }, |           }, | ||||||
|           areaStyle: { |           areaStyle: { | ||||||
|             opacity: 0.25, |             opacity: 0.5, | ||||||
|           }, |           }, | ||||||
|         }  |           stack: 'Total', | ||||||
|  |           color: '#7D4698', | ||||||
|  |         }, | ||||||
|       ], |       ], | ||||||
|       dataZoom: this.widget ? null : [{ |       dataZoom: this.widget ? null : [{ | ||||||
|         type: 'inside', |         type: 'inside', | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user