Use shared component in node ranking list
This commit is contained in:
parent
88a36f4378
commit
ee23d1695d
@ -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 {
|
||||||
|
@ -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,9 +35,9 @@
|
|||||||
<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>
|
||||||
<ng-template #skeleton>
|
<ng-template #skeleton>
|
||||||
<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