From e509989ac351c86a4da7ce7bee8d783133e78efd Mon Sep 17 00:00:00 2001 From: fmtabbara Date: Tue, 6 Jun 2023 10:01:27 +0100 Subject: [PATCH] wip --- explorer-api/src/service_providers/http.rs | 15 ++++++++--- explorer-api/src/service_providers/models.rs | 27 +++++++++++++++++++ explorer/src/pages/ServiceProviders/index.tsx | 12 +++++++++ explorer/src/typeDefs/explorer-api.ts | 4 +++ 4 files changed, 55 insertions(+), 3 deletions(-) diff --git a/explorer-api/src/service_providers/http.rs b/explorer-api/src/service_providers/http.rs index 418e113a96..fa992916fd 100644 --- a/explorer-api/src/service_providers/http.rs +++ b/explorer-api/src/service_providers/http.rs @@ -1,4 +1,4 @@ -use crate::service_providers::models::DirectoryService; +use crate::service_providers::models::{DirectoryService, HarbourMasterService, PagedResult}; use okapi::openapi3::OpenApi; use reqwest::Error as ReqwestError; use rocket::{serde::json::Json, Route}; @@ -7,15 +7,24 @@ use rocket_okapi::settings::OpenApiSettings; static SERVICE_PROVIDER_WELLKNOWN_URL: &str = "https://nymtech.net/.wellknown/connect/service-providers.json"; +static HARBOUR_MASTER_URL: &str = "https://harbourmaster.nymtech.net/v1/services/?size=100"; + pub fn service_providers_make_default_routes(settings: &OpenApiSettings) -> (Vec, OpenApi) { openapi_get_routes_spec![settings: get_service_providers] } pub async fn get_services() -> Result, ReqwestError> { - reqwest::get(SERVICE_PROVIDER_WELLKNOWN_URL) + let services_res = reqwest::get(SERVICE_PROVIDER_WELLKNOWN_URL) .await? .json::>() - .await + .await; + + let active_services_res = reqwest::get(HARBOUR_MASTER_URL) + .await? + .json::>() + .await?; + + return services_res; } #[openapi(tag = "service_providers")] diff --git a/explorer-api/src/service_providers/models.rs b/explorer-api/src/service_providers/models.rs index 21ee1df812..0098aa93ca 100644 --- a/explorer-api/src/service_providers/models.rs +++ b/explorer-api/src/service_providers/models.rs @@ -8,9 +8,36 @@ pub struct DirectoryServiceProvider { pub gateway: String, } +pub struct DirectoryServiceProviderDetailed { + pub id: String, + pub description: String, + pub address: String, + pub gateway: String, + pub routing_score: f32, + pub service_type: String, +} + #[derive(Clone, Debug, Serialize, Deserialize, JsonSchema)] pub struct DirectoryService { pub id: String, pub description: String, pub items: Vec, } + +#[derive(Debug, Clone, Deserialize, Serialize)] +pub struct HarbourMasterService { + pub service_provider_client_id: String, + pub gateway_identity_key: String, + pub ip_address: String, + pub last_successful_ping_utc: String, + pub last_updated_utc: String, + pub routing_score: f32, +} + +#[derive(Debug, Clone, Deserialize, Serialize)] +pub struct PagedResult { + pub page: u32, + pub size: u32, + pub total: i32, + pub items: Vec, +} diff --git a/explorer/src/pages/ServiceProviders/index.tsx b/explorer/src/pages/ServiceProviders/index.tsx index 0c864d503f..f6fb0563f6 100644 --- a/explorer/src/pages/ServiceProviders/index.tsx +++ b/explorer/src/pages/ServiceProviders/index.tsx @@ -10,6 +10,18 @@ const columns = [ headerName: 'Client ID', field: 'address', disableColumnMenu: true, + flex: 2, + }, + { + headerName: 'Type', + field: 'type', + disableColumnMenu: true, + flex: 1, + }, + { + headerName: 'Routing score', + field: 'routingScore', + disableColumnMenu: true, flex: 1, }, ]; diff --git a/explorer/src/typeDefs/explorer-api.ts b/explorer/src/typeDefs/explorer-api.ts index 3fb4b60c43..3ff646771a 100644 --- a/explorer/src/typeDefs/explorer-api.ts +++ b/explorer/src/typeDefs/explorer-api.ts @@ -241,11 +241,15 @@ export type MixNodeEconomicDynamicsStatsResponse = { export type Environment = 'mainnet' | 'sandbox' | 'qa'; +export type ServiceProviderType = 'Network Requester'; + export type DirectoryServiceProvider = { id: string; description: string; address: string; gateway: string; + routingScore: number; + serviceType: ServiceProviderType; }; export type DirectoryService = {