From bb7c654134948ec3552f0942ef165e50956e4a74 Mon Sep 17 00:00:00 2001 From: Jost Schulte Date: Sat, 15 Apr 2023 05:46:20 -0600 Subject: [PATCH] feat(admin-api): add call dumpNetworkStats (#184) * remove unneded error throw * update network info type * add networkstats call * udpate changelog * fix test --- CHANGELOG.md | 4 +++- docs/client.dnaproperties.md | 2 +- docs/client.networkinfo.arc_size.md | 11 +++++++++++ ...nt.networkinfo.bytes_since_last_time_queried.md | 11 +++++++++++ ...nfo.completed_rounds_since_last_time_queried.md | 11 +++++++++++ docs/client.networkinfo.current_number_of_peers.md | 11 +++++++++++ docs/client.networkinfo.md | 5 +++++ docs/client.networkinfo.total_network_peers.md | 11 +++++++++++ src/api/admin/types.ts | 14 ++++++++++++++ src/api/admin/websocket.ts | 7 +++++++ src/api/app-agent/websocket.ts | 8 +------- src/types.ts | 7 ++++++- test/e2e/index.ts | 13 +++++++++++++ 13 files changed, 105 insertions(+), 10 deletions(-) create mode 100644 docs/client.networkinfo.arc_size.md create mode 100644 docs/client.networkinfo.bytes_since_last_time_queried.md create mode 100644 docs/client.networkinfo.completed_rounds_since_last_time_queried.md create mode 100644 docs/client.networkinfo.current_number_of_peers.md create mode 100644 docs/client.networkinfo.total_network_peers.md diff --git a/CHANGELOG.md b/CHANGELOG.md index 4890d9ad..4587f7d0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,8 +6,10 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). ### Added - New Admin API endpoint `storageInfo`. -- New Admin API endpoint 'updateCoordinators' to update coordinator zomes in an already installed hApp. +- New Admin API endpoint `dumpNetworkStats`. +- New Admin API endpoint `updateCoordinators` to update coordinator zomes in an already installed hApp. ### Changed +- Updated response type `NetworkInfo`. ### Fixed ### Removed diff --git a/docs/client.dnaproperties.md b/docs/client.dnaproperties.md index 98438764..53a0f83a 100644 --- a/docs/client.dnaproperties.md +++ b/docs/client.dnaproperties.md @@ -8,5 +8,5 @@ Signature: ```typescript -export declare type DnaProperties = any; +export declare type DnaProperties = unknown; ``` diff --git a/docs/client.networkinfo.arc_size.md b/docs/client.networkinfo.arc_size.md new file mode 100644 index 00000000..11543e5a --- /dev/null +++ b/docs/client.networkinfo.arc_size.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [@holochain/client](./client.md) > [NetworkInfo](./client.networkinfo.md) > [arc\_size](./client.networkinfo.arc_size.md) + +## NetworkInfo.arc\_size property + +Signature: + +```typescript +arc_size: number; +``` diff --git a/docs/client.networkinfo.bytes_since_last_time_queried.md b/docs/client.networkinfo.bytes_since_last_time_queried.md new file mode 100644 index 00000000..ad0c36df --- /dev/null +++ b/docs/client.networkinfo.bytes_since_last_time_queried.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [@holochain/client](./client.md) > [NetworkInfo](./client.networkinfo.md) > [bytes\_since\_last\_time\_queried](./client.networkinfo.bytes_since_last_time_queried.md) + +## NetworkInfo.bytes\_since\_last\_time\_queried property + +Signature: + +```typescript +bytes_since_last_time_queried: number; +``` diff --git a/docs/client.networkinfo.completed_rounds_since_last_time_queried.md b/docs/client.networkinfo.completed_rounds_since_last_time_queried.md new file mode 100644 index 00000000..d110672e --- /dev/null +++ b/docs/client.networkinfo.completed_rounds_since_last_time_queried.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [@holochain/client](./client.md) > [NetworkInfo](./client.networkinfo.md) > [completed\_rounds\_since\_last\_time\_queried](./client.networkinfo.completed_rounds_since_last_time_queried.md) + +## NetworkInfo.completed\_rounds\_since\_last\_time\_queried property + +Signature: + +```typescript +completed_rounds_since_last_time_queried: number; +``` diff --git a/docs/client.networkinfo.current_number_of_peers.md b/docs/client.networkinfo.current_number_of_peers.md new file mode 100644 index 00000000..4ace907a --- /dev/null +++ b/docs/client.networkinfo.current_number_of_peers.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [@holochain/client](./client.md) > [NetworkInfo](./client.networkinfo.md) > [current\_number\_of\_peers](./client.networkinfo.current_number_of_peers.md) + +## NetworkInfo.current\_number\_of\_peers property + +Signature: + +```typescript +current_number_of_peers: number; +``` diff --git a/docs/client.networkinfo.md b/docs/client.networkinfo.md index 62cc8ad0..f24e1b2e 100644 --- a/docs/client.networkinfo.md +++ b/docs/client.networkinfo.md @@ -15,5 +15,10 @@ export interface NetworkInfo | Property | Modifiers | Type | Description | | --- | --- | --- | --- | +| [arc\_size](./client.networkinfo.arc_size.md) | | number | | +| [bytes\_since\_last\_time\_queried](./client.networkinfo.bytes_since_last_time_queried.md) | | number | | +| [completed\_rounds\_since\_last\_time\_queried](./client.networkinfo.completed_rounds_since_last_time_queried.md) | | number | | +| [current\_number\_of\_peers](./client.networkinfo.current_number_of_peers.md) | | number | | | [fetch\_pool\_info](./client.networkinfo.fetch_pool_info.md) | | [FetchPoolInfo](./client.fetchpoolinfo.md) | | +| [total\_network\_peers](./client.networkinfo.total_network_peers.md) | | number | | diff --git a/docs/client.networkinfo.total_network_peers.md b/docs/client.networkinfo.total_network_peers.md new file mode 100644 index 00000000..99d9c14a --- /dev/null +++ b/docs/client.networkinfo.total_network_peers.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [@holochain/client](./client.md) > [NetworkInfo](./client.networkinfo.md) > [total\_network\_peers](./client.networkinfo.total_network_peers.md) + +## NetworkInfo.total\_network\_peers property + +Signature: + +```typescript +total_network_peers: number; +``` diff --git a/src/api/admin/types.ts b/src/api/admin/types.ts index e4767be4..c325ee86 100644 --- a/src/api/admin/types.ts +++ b/src/api/admin/types.ts @@ -789,6 +789,16 @@ export type StorageInfoRequest = void; */ export type StorageInfoResponse = StorageInfo; +/** + * @public + */ +export type DumpNetworkStatsRequest = void; + +/** + * @public + */ +export type DumpNetworkStatsResponse = string; + /** * @public */ @@ -827,4 +837,8 @@ export interface AdminApi { GrantZomeCallCapabilityResponse >; storageInfo: Requester; + dumpNetworkStats: Requester< + DumpNetworkStatsRequest, + DumpNetworkStatsResponse + >; } diff --git a/src/api/admin/websocket.ts b/src/api/admin/websocket.ts index 0839790d..469eddad 100644 --- a/src/api/admin/websocket.ts +++ b/src/api/admin/websocket.ts @@ -34,6 +34,8 @@ import { DisableAppResponse, DumpFullStateRequest, DumpFullStateResponse, + DumpNetworkStatsRequest, + DumpNetworkStatsResponse, DumpStateRequest, DumpStateResponse, EnableAppRequest, @@ -260,6 +262,11 @@ export class AdminWebsocket implements AdminApi { storageInfo: Requester = this._requester("storage_info"); + dumpNetworkStats: Requester< + DumpNetworkStatsRequest, + DumpNetworkStatsResponse + > = this._requester("dump_network_stats"); + // zome call signing related methods /** diff --git a/src/api/app-agent/websocket.ts b/src/api/app-agent/websocket.ts index 3c47d178..598671d7 100644 --- a/src/api/app-agent/websocket.ts +++ b/src/api/app-agent/websocket.ts @@ -145,13 +145,7 @@ export class AppAgentWebsocket implements AppAgentClient { request: AppAgentCallZomeRequest, timeout?: number ): Promise { - if ("provenance" in request) { - if ("role_name" in request && request.role_name) { - throw new Error( - "Cannot find other agent's cells based on role name. Use cell id when providing a provenance." - ); - } - } else { + if (!("provenance" in request)) { request = { ...request, provenance: this.myPubKey, diff --git a/src/types.ts b/src/types.ts index 27d6bca0..36bc5b1a 100644 --- a/src/types.ts +++ b/src/types.ts @@ -85,7 +85,7 @@ export type CellId = [DnaHash, AgentPubKey]; /** * @public */ -export type DnaProperties = any; +export type DnaProperties = unknown; /** * @public */ @@ -124,6 +124,11 @@ export interface HoloHashed { */ export interface NetworkInfo { fetch_pool_info: FetchPoolInfo; + current_number_of_peers: number; + arc_size: number; + total_network_peers: number; + bytes_since_last_time_queried: number; + completed_rounds_since_last_time_queried: number; } /** diff --git a/test/e2e/index.ts b/test/e2e/index.ts index ca236077..7902d1b8 100644 --- a/test/e2e/index.ts +++ b/test/e2e/index.ts @@ -278,6 +278,7 @@ test( new Date("2022-02-11T23:05:19.470323Z").getTime(), "dna definition: origin time matches" ); + assert(Buffer.isBuffer(dnaDefinition.modifiers.properties)); t.equal( decode(dnaDefinition.modifiers.properties), null, @@ -964,6 +965,18 @@ test( }) ); +test( + "can fetch network stats", + withConductor(ADMIN_PORT, async (t: Test) => { + const { admin } = await installAppAndDna(ADMIN_PORT); + + const response = await admin.dumpNetworkStats(); + + t.ok(typeof response === "string", "response is string"); + t.ok(JSON.parse(response), "response is valid JSON"); + }) +); + test( "can update coordinators of an app", withConductor(ADMIN_PORT, async (t: Test) => {