Merge pull request #2500 from mempool/nymkappa/bugfix/node-list-location-label
Renamed "City" to "Location"
This commit is contained in:
		
						commit
						04b4c61f83
					
				| @ -133,10 +133,13 @@ class NodesApi { | |||||||
|             CAST(COALESCE(nodes.capacity, 0) as INT) as capacity, |             CAST(COALESCE(nodes.capacity, 0) as INT) as capacity, | ||||||
|             CAST(COALESCE(nodes.channels, 0) as INT) as channels, |             CAST(COALESCE(nodes.channels, 0) as INT) as channels, | ||||||
|             UNIX_TIMESTAMP(nodes.first_seen) as firstSeen, UNIX_TIMESTAMP(nodes.updated_at) as updatedAt, |             UNIX_TIMESTAMP(nodes.first_seen) as firstSeen, UNIX_TIMESTAMP(nodes.updated_at) as updatedAt, | ||||||
|             geo_names_city.names as city, geo_names_country.names as country |             geo_names_city.names as city, geo_names_country.names as country, | ||||||
|  |             geo_names_iso.names as iso_code, geo_names_subdivision.names as subdivision | ||||||
|           FROM nodes |           FROM nodes | ||||||
|           LEFT JOIN geo_names geo_names_country ON geo_names_country.id = nodes.country_id AND geo_names_country.type = 'country' |           LEFT JOIN geo_names geo_names_country ON geo_names_country.id = nodes.country_id AND geo_names_country.type = 'country' | ||||||
|           LEFT JOIN geo_names geo_names_city ON geo_names_city.id = nodes.city_id AND geo_names_city.type = 'city' |           LEFT JOIN geo_names geo_names_city ON geo_names_city.id = nodes.city_id AND geo_names_city.type = 'city' | ||||||
|  |           LEFT JOIN geo_names geo_names_iso ON geo_names_iso.id = nodes.country_id AND geo_names_iso.type = 'country_iso_code' | ||||||
|  |           LEFT JOIN geo_names geo_names_subdivision on geo_names_subdivision.id = nodes.subdivision_id AND geo_names_subdivision.type = 'division' | ||||||
|           ORDER BY capacity DESC |           ORDER BY capacity DESC | ||||||
|           LIMIT 100 |           LIMIT 100 | ||||||
|         `;
 |         `;
 | ||||||
| @ -175,10 +178,13 @@ class NodesApi { | |||||||
|             CAST(COALESCE(nodes.channels, 0) as INT) as channels, |             CAST(COALESCE(nodes.channels, 0) as INT) as channels, | ||||||
|             CAST(COALESCE(nodes.capacity, 0) as INT) as capacity, |             CAST(COALESCE(nodes.capacity, 0) as INT) as capacity, | ||||||
|             UNIX_TIMESTAMP(nodes.first_seen) as firstSeen, UNIX_TIMESTAMP(nodes.updated_at) as updatedAt, |             UNIX_TIMESTAMP(nodes.first_seen) as firstSeen, UNIX_TIMESTAMP(nodes.updated_at) as updatedAt, | ||||||
|             geo_names_city.names as city, geo_names_country.names as country |             geo_names_city.names as city, geo_names_country.names as country, | ||||||
|  |             geo_names_iso.names as iso_code, geo_names_subdivision.names as subdivision | ||||||
|           FROM nodes |           FROM nodes | ||||||
|           LEFT JOIN geo_names geo_names_country ON geo_names_country.id = nodes.country_id AND geo_names_country.type = 'country' |           LEFT JOIN geo_names geo_names_country ON geo_names_country.id = nodes.country_id AND geo_names_country.type = 'country' | ||||||
|           LEFT JOIN geo_names geo_names_city ON geo_names_city.id = nodes.city_id AND geo_names_city.type = 'city' |           LEFT JOIN geo_names geo_names_city ON geo_names_city.id = nodes.city_id AND geo_names_city.type = 'city' | ||||||
|  |           LEFT JOIN geo_names geo_names_iso ON geo_names_iso.id = nodes.country_id AND geo_names_iso.type = 'country_iso_code' | ||||||
|  |           LEFT JOIN geo_names geo_names_subdivision on geo_names_subdivision.id = nodes.subdivision_id AND geo_names_subdivision.type = 'division' | ||||||
|           ORDER BY channels DESC |           ORDER BY channels DESC | ||||||
|           LIMIT 100 |           LIMIT 100 | ||||||
|         `;
 |         `;
 | ||||||
| @ -221,11 +227,14 @@ class NodesApi { | |||||||
|             CAST(COALESCE(node_stats.channels, 0) as INT) as channels, |             CAST(COALESCE(node_stats.channels, 0) as INT) as channels, | ||||||
|             CAST(COALESCE(node_stats.capacity, 0) as INT) as capacity, |             CAST(COALESCE(node_stats.capacity, 0) as INT) as capacity, | ||||||
|             UNIX_TIMESTAMP(nodes.first_seen) as firstSeen, UNIX_TIMESTAMP(nodes.updated_at) as updatedAt, |             UNIX_TIMESTAMP(nodes.first_seen) as firstSeen, UNIX_TIMESTAMP(nodes.updated_at) as updatedAt, | ||||||
|             geo_names_city.names as city, geo_names_country.names as country |             geo_names_city.names as city, geo_names_country.names as country, | ||||||
|  |             geo_names_iso.names as iso_code, geo_names_subdivision.names as subdivision | ||||||
|           FROM node_stats |           FROM node_stats | ||||||
|           RIGHT JOIN nodes ON nodes.public_key = node_stats.public_key |           RIGHT JOIN nodes ON nodes.public_key = node_stats.public_key | ||||||
|           LEFT JOIN geo_names geo_names_country ON geo_names_country.id = nodes.country_id AND geo_names_country.type = 'country' |           LEFT JOIN geo_names geo_names_country ON geo_names_country.id = nodes.country_id AND geo_names_country.type = 'country' | ||||||
|           LEFT JOIN geo_names geo_names_city ON geo_names_city.id = nodes.city_id AND geo_names_city.type = 'city' |           LEFT JOIN geo_names geo_names_city ON geo_names_city.id = nodes.city_id AND geo_names_city.type = 'city' | ||||||
|  |           LEFT JOIN geo_names geo_names_iso ON geo_names_iso.id = nodes.country_id AND geo_names_iso.type = 'country_iso_code' | ||||||
|  |           LEFT JOIN geo_names geo_names_subdivision on geo_names_subdivision.id = nodes.subdivision_id AND geo_names_subdivision.type = 'division' | ||||||
|           WHERE added = FROM_UNIXTIME(${latestDate}) |           WHERE added = FROM_UNIXTIME(${latestDate}) | ||||||
|           ORDER BY first_seen |           ORDER BY first_seen | ||||||
|           LIMIT 100 |           LIMIT 100 | ||||||
|  | |||||||
| @ -161,6 +161,9 @@ export interface ITopNodesPerChannels { | |||||||
|   updatedAt?: number, |   updatedAt?: number, | ||||||
|   city?: any, |   city?: any, | ||||||
|   country?: any, |   country?: any, | ||||||
|  |   subdivision?: any, | ||||||
|  |   iso_code?: string, | ||||||
|  |   geolocation?: any; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| export interface ITopNodesPerCapacity { | export interface ITopNodesPerCapacity { | ||||||
| @ -172,6 +175,9 @@ export interface ITopNodesPerCapacity { | |||||||
|   updatedAt?: number, |   updatedAt?: number, | ||||||
|   city?: any, |   city?: any, | ||||||
|   country?: any, |   country?: any, | ||||||
|  |   subdivision?: any, | ||||||
|  |   iso_code?: string, | ||||||
|  |   geolocation?: any; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| export interface INodesRanking { | export interface INodesRanking { | ||||||
| @ -188,6 +194,9 @@ export interface IOldestNodes { | |||||||
|   updatedAt?: number, |   updatedAt?: number, | ||||||
|   city?: any, |   city?: any, | ||||||
|   country?: any, |   country?: any, | ||||||
|  |   subdivision?: any, | ||||||
|  |   iso_code?: string, | ||||||
|  |   geolocation?: any; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| export interface IChannel { | export interface IChannel { | ||||||
|  | |||||||
| @ -12,7 +12,7 @@ | |||||||
|         <th class="timestamp-update text-left" i18n="lightning.last_update">Last update</th> |         <th class="timestamp-update text-left" i18n="lightning.last_update">Last update</th> | ||||||
|         <th class="capacity text-right" i18n="lightning.capacity">Capacity</th> |         <th class="capacity text-right" i18n="lightning.capacity">Capacity</th> | ||||||
|         <th class="channels text-right" i18n="lightning.channels">Channels</th> |         <th class="channels text-right" i18n="lightning.channels">Channels</th> | ||||||
|         <th class="city text-right" i18n="lightning.city">City</th> |         <th class="city text-right" i18n="lightning.location">Location</th> | ||||||
|       </thead> |       </thead> | ||||||
|       <tbody *ngIf="nodes$ | async as nodes"> |       <tbody *ngIf="nodes$ | async as nodes"> | ||||||
|         <tr *ngFor="let node of nodes; let i= index; trackBy: trackByPublicKey"> |         <tr *ngFor="let node of nodes; let i= index; trackBy: trackByPublicKey"> | ||||||
|  | |||||||
| @ -9,7 +9,7 @@ | |||||||
|         <th class="timestamp-update text-left" i18n="lightning.last_update">Last update</th> |         <th class="timestamp-update text-left" i18n="lightning.last_update">Last update</th> | ||||||
|         <th class="capacity text-right" i18n="lightning.capacity">Capacity</th> |         <th class="capacity text-right" i18n="lightning.capacity">Capacity</th> | ||||||
|         <th class="channels text-right" i18n="lightning.channels">Channels</th> |         <th class="channels text-right" i18n="lightning.channels">Channels</th> | ||||||
|         <th class="city text-right" i18n="lightning.city">City</th> |         <th class="city text-right" i18n="lightning.location">Location</th> | ||||||
|       </thead> |       </thead> | ||||||
|       <tbody *ngIf="nodes$ | async as nodes"> |       <tbody *ngIf="nodes$ | async as nodes"> | ||||||
|         <tr *ngFor="let node of nodes; let i= index; trackBy: trackByPublicKey"> |         <tr *ngFor="let node of nodes; let i= index; trackBy: trackByPublicKey"> | ||||||
|  | |||||||
| @ -35,7 +35,7 @@ | |||||||
|             <app-timestamp [customFormat]="'yyyy-MM-dd'" [unixTime]="node.updatedAt"></app-timestamp> |             <app-timestamp [customFormat]="'yyyy-MM-dd'" [unixTime]="node.updatedAt"></app-timestamp> | ||||||
|           </td> |           </td> | ||||||
|           <td *ngIf="!widget" class="location text-right text-truncate"> |           <td *ngIf="!widget" class="location text-right text-truncate"> | ||||||
|             {{ node?.city?.en ?? '-' }} |             <app-geolocation [data]="node.geolocation" [type]="'list-isp'"></app-geolocation> | ||||||
|           </td> |           </td> | ||||||
|         </tr> |         </tr> | ||||||
|       </tbody> |       </tbody> | ||||||
|  | |||||||
| @ -1,5 +1,6 @@ | |||||||
| import { ChangeDetectionStrategy, Component, Input, OnInit } from '@angular/core'; | import { ChangeDetectionStrategy, Component, Input, OnInit } from '@angular/core'; | ||||||
| import { map, Observable } from 'rxjs'; | import { map, Observable } from 'rxjs'; | ||||||
|  | import { GeolocationData } from 'src/app/shared/components/geolocation/geolocation.component'; | ||||||
| import { IOldestNodes } from '../../../interfaces/node-api.interface'; | import { IOldestNodes } from '../../../interfaces/node-api.interface'; | ||||||
| import { LightningApiService } from '../../lightning-api.service'; | import { LightningApiService } from '../../lightning-api.service'; | ||||||
| 
 | 
 | ||||||
| @ -23,11 +24,23 @@ export class OldestNodes implements OnInit { | |||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     if (this.widget === false) { |     if (this.widget === false) { | ||||||
|       this.oldestNodes$ = this.apiService.getOldestNodes$(); |       this.oldestNodes$ = this.apiService.getOldestNodes$().pipe( | ||||||
|  |         map((ranking) => { | ||||||
|  |           for (const i in ranking) { | ||||||
|  |             ranking[i].geolocation = <GeolocationData>{ | ||||||
|  |               country: ranking[i].country?.en, | ||||||
|  |               city: ranking[i].city?.en, | ||||||
|  |               subdivision: ranking[i].subdivision?.en, | ||||||
|  |               iso: ranking[i].iso_code, | ||||||
|  |             }; | ||||||
|  |           } | ||||||
|  |           return ranking; | ||||||
|  |         }) | ||||||
|  |       ); | ||||||
|     } else { |     } else { | ||||||
|       this.oldestNodes$ = this.apiService.getOldestNodes$().pipe( |       this.oldestNodes$ = this.apiService.getOldestNodes$().pipe( | ||||||
|         map((nodes: IOldestNodes[]) => { |         map((nodes: IOldestNodes[]) => { | ||||||
|           return nodes.slice(0, 10); |           return nodes.slice(0, 7); | ||||||
|         }) |         }) | ||||||
|       ); |       ); | ||||||
|     } |     } | ||||||
|  | |||||||
| @ -35,7 +35,7 @@ | |||||||
|             <app-timestamp [customFormat]="'yyyy-MM-dd'" [unixTime]="node.updatedAt"></app-timestamp> |             <app-timestamp [customFormat]="'yyyy-MM-dd'" [unixTime]="node.updatedAt"></app-timestamp> | ||||||
|           </td> |           </td> | ||||||
|           <td *ngIf="!widget" class="location text-right text-truncate"> |           <td *ngIf="!widget" class="location text-right text-truncate"> | ||||||
|             {{ node?.city?.en ?? '-' }} |             <app-geolocation [data]="node.geolocation" [type]="'list-isp'"></app-geolocation> | ||||||
|           </td> |           </td> | ||||||
|         </tr> |         </tr> | ||||||
|       </tbody> |       </tbody> | ||||||
|  | |||||||
| @ -2,6 +2,7 @@ import { ChangeDetectionStrategy, Component, Input, OnInit } from '@angular/core | |||||||
| import { map, Observable } from 'rxjs'; | import { map, Observable } from 'rxjs'; | ||||||
| import { INodesRanking, ITopNodesPerCapacity } from 'src/app/interfaces/node-api.interface'; | import { INodesRanking, ITopNodesPerCapacity } from 'src/app/interfaces/node-api.interface'; | ||||||
| import { isMobile } from 'src/app/shared/common.utils'; | import { isMobile } from 'src/app/shared/common.utils'; | ||||||
|  | import { GeolocationData } from 'src/app/shared/components/geolocation/geolocation.component'; | ||||||
| import { LightningApiService } from '../../lightning-api.service'; | import { LightningApiService } from '../../lightning-api.service'; | ||||||
| 
 | 
 | ||||||
| @Component({ | @Component({ | ||||||
| @ -25,7 +26,19 @@ export class TopNodesPerCapacity implements OnInit { | |||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     if (this.widget === false) { |     if (this.widget === false) { | ||||||
|       this.topNodesPerCapacity$ = this.apiService.getTopNodesByCapacity$(); |       this.topNodesPerCapacity$ = this.apiService.getTopNodesByCapacity$().pipe( | ||||||
|  |         map((ranking) => { | ||||||
|  |           for (const i in ranking) { | ||||||
|  |             ranking[i].geolocation = <GeolocationData>{ | ||||||
|  |               country: ranking[i].country?.en, | ||||||
|  |               city: ranking[i].city?.en, | ||||||
|  |               subdivision: ranking[i].subdivision?.en, | ||||||
|  |               iso: ranking[i].iso_code, | ||||||
|  |             }; | ||||||
|  |           } | ||||||
|  |           return ranking; | ||||||
|  |         }) | ||||||
|  |       ); | ||||||
|     } else { |     } else { | ||||||
|       this.topNodesPerCapacity$ = this.nodes$.pipe( |       this.topNodesPerCapacity$ = this.nodes$.pipe( | ||||||
|         map((ranking) => { |         map((ranking) => { | ||||||
|  | |||||||
| @ -35,7 +35,7 @@ | |||||||
|             <app-timestamp [customFormat]="'yyyy-MM-dd'" [unixTime]="node.updatedAt"></app-timestamp> |             <app-timestamp [customFormat]="'yyyy-MM-dd'" [unixTime]="node.updatedAt"></app-timestamp> | ||||||
|           </td> |           </td> | ||||||
|           <td *ngIf="!widget" class="location text-right text-truncate"> |           <td *ngIf="!widget" class="location text-right text-truncate"> | ||||||
|             {{ node?.city?.en ?? '-' }} |             <app-geolocation [data]="node.geolocation" [type]="'list-isp'"></app-geolocation> | ||||||
|           </td> |           </td> | ||||||
|       </tr> |       </tr> | ||||||
|       </tbody> |       </tbody> | ||||||
|  | |||||||
| @ -2,6 +2,7 @@ import { ChangeDetectionStrategy, Component, Input, OnInit } from '@angular/core | |||||||
| import { map, Observable } from 'rxjs'; | import { map, Observable } from 'rxjs'; | ||||||
| import { INodesRanking, ITopNodesPerChannels } from 'src/app/interfaces/node-api.interface'; | import { INodesRanking, ITopNodesPerChannels } from 'src/app/interfaces/node-api.interface'; | ||||||
| import { isMobile } from 'src/app/shared/common.utils'; | import { isMobile } from 'src/app/shared/common.utils'; | ||||||
|  | import { GeolocationData } from 'src/app/shared/components/geolocation/geolocation.component'; | ||||||
| import { LightningApiService } from '../../lightning-api.service'; | import { LightningApiService } from '../../lightning-api.service'; | ||||||
| 
 | 
 | ||||||
| @Component({ | @Component({ | ||||||
| @ -25,7 +26,19 @@ export class TopNodesPerChannels implements OnInit { | |||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     if (this.widget === false) { |     if (this.widget === false) { | ||||||
|       this.topNodesPerChannels$ = this.apiService.getTopNodesByChannels$(); |       this.topNodesPerChannels$ = this.apiService.getTopNodesByChannels$().pipe( | ||||||
|  |         map((ranking) => { | ||||||
|  |           for (const i in ranking) { | ||||||
|  |             ranking[i].geolocation = <GeolocationData>{ | ||||||
|  |               country: ranking[i].country?.en, | ||||||
|  |               city: ranking[i].city?.en, | ||||||
|  |               subdivision: ranking[i].subdivision?.en, | ||||||
|  |               iso: ranking[i].iso_code, | ||||||
|  |             }; | ||||||
|  |           } | ||||||
|  |           return ranking; | ||||||
|  |         }) | ||||||
|  |       ); | ||||||
|     } else { |     } else { | ||||||
|       this.topNodesPerChannels$ = this.nodes$.pipe( |       this.topNodesPerChannels$ = this.nodes$.pipe( | ||||||
|         map((ranking) => { |         map((ranking) => { | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user