Skip to content

Commit 9b32edb

Browse files
authored
added support for admin.dbInfo (#34)
1 parent c73f0da commit 9b32edb

File tree

7 files changed

+63
-11
lines changed

7 files changed

+63
-11
lines changed

etc/astra-db-ts.api.md

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,7 @@ export class AstraAdmin {
113113
db(id: string, region: string, options?: DbSpawnOptions): Db;
114114
dbAdmin(endpoint: string, options?: DbSpawnOptions): AstraDbAdmin;
115115
dbAdmin(id: string, region: string, options?: DbSpawnOptions): AstraDbAdmin;
116+
dbInfo(id: string, options?: WithTimeout): Promise<FullDatabaseInfo>;
116117
dropDatabase(db: Db | string, options?: AdminBlockingOptions): Promise<void>;
117118
listDatabases(options?: ListDatabasesOptions): Promise<FullDatabaseInfo[]>;
118119
}
@@ -187,6 +188,7 @@ export class Collection<Schema extends SomeDoc = SomeDoc> {
187188
deleteOne(filter?: Filter<Schema>, options?: DeleteOneOptions): Promise<DeleteOneResult>;
188189
distinct<Key extends string>(key: Key, filter?: Filter<Schema>): Promise<Flatten<(SomeDoc & ToDotNotation<FoundDoc<Schema>>)[Key]>[]>;
189190
drop(options?: WithTimeout): Promise<boolean>;
191+
estimatedDocumentCount(options?: WithTimeout): Promise<number>;
190192
find(filter: Filter<Schema>, options?: FindOptions): FindCursor<FoundDoc<Schema>, FoundDoc<Schema>>;
191193
findOne(filter: Filter<Schema>, options?: FindOneOptions): Promise<FoundDoc<Schema> | null>;
192194
findOneAndDelete(filter: Filter<Schema>, options: FindOneAndDeleteOptions & {
@@ -345,6 +347,8 @@ export interface DataAPIClientOptions {
345347
adminOptions?: AdminSpawnOptions;
346348
caller?: Caller | Caller[];
347349
dbOptions?: DbSpawnOptions;
350+
httpOptions?: DataAPIHttpOptions;
351+
// @deprecated
348352
preferHttp2?: boolean;
349353
}
350354

@@ -373,6 +377,21 @@ export interface DataAPIErrorDescriptor {
373377
readonly message?: string;
374378
}
375379

380+
// @public
381+
export interface DataAPIHttp1Options {
382+
keepAlive?: boolean;
383+
keepAliveMS?: number;
384+
maxFreeSockets?: number;
385+
maxSockets?: number;
386+
}
387+
388+
// @public
389+
export interface DataAPIHttpOptions {
390+
http1?: DataAPIHttp1Options;
391+
maxTimeMS?: number;
392+
preferHttp2?: boolean;
393+
}
394+
376395
// @public
377396
export class DataAPIResponseError extends DataAPIError {
378397
// @internal

src/client/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,4 +14,4 @@
1414
// noinspection DuplicatedCode
1515

1616
export * from './data-api-client';
17-
export { DbSpawnOptions, AdminSpawnOptions, DataAPIClientOptions, Caller } from './types';
17+
export { DbSpawnOptions, AdminSpawnOptions, DataAPIClientOptions, Caller, DataAPIHttpOptions, DataAPIHttp1Options } from './types';

src/client/types.ts

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -85,9 +85,13 @@ export interface DataAPIClientOptions {
8585
*/
8686
caller?: Caller | Caller[],
8787
/**
88-
* **Prefer to use the {@link httpOptions} property instead.**
88+
* Whether to prefer HTTP/2 for requests to the Data API; if set to `false`, HTTP/1.1 will be used instead.
89+
*
90+
* **Prefer to use the {@link DataAPIClientOptions.httpOptions} property instead.**
8991
*
90-
* @deprecated
92+
* The two are functionally equivalent; this is provided for backwards compatibility.
93+
*
94+
* @deprecated Use the {@link DataAPIClientOptions.httpOptions} property instead.
9195
*
9296
* @see DataAPIHttpOptions
9397
*/
@@ -96,6 +100,8 @@ export interface DataAPIClientOptions {
96100

97101
/**
98102
* The options available for the {@link DataAPIClient} related to making HTTP requests.
103+
*
104+
* @public
99105
*/
100106
export interface DataAPIHttpOptions {
101107
/**
@@ -127,6 +133,8 @@ export interface DataAPIHttpOptions {
127133

128134
/**
129135
* The options available for the {@link DataAPIClient} related to making HTTP/1.1 requests.
136+
*
137+
* @public
130138
*/
131139
export interface DataAPIHttp1Options {
132140
/**

src/data-api/db.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -509,7 +509,7 @@ export function validateDbOpts(opts: DbSpawnOptions | undefined) {
509509
return;
510510
}
511511

512-
validateOption<string>('namespace option', opts.namespace, 'string', (namespace) => {
512+
validateOption('namespace option', opts.namespace, 'string', (namespace) => {
513513
if (!namespace.match(/^\w{1,48}$/)) {
514514
throw new Error('Invalid namespace option; expected a string of 1-48 alphanumeric characters');
515515
}

src/devops/astra-admin.ts

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import { AstraDbAdmin } from '@/src/devops/astra-db-admin';
1111
import { AdminSpawnOptions, DbSpawnOptions, InternalRootClientOpts } from '@/src/client/types';
1212
import { validateOption } from '@/src/data-api/utils';
1313
import { mkDb } from '@/src/data-api/db';
14+
import { WithTimeout } from '@/src/common';
1415

1516
/**
1617
* An administrative class for managing Astra databases, including creating, listing, and deleting databases.
@@ -216,6 +217,27 @@ export class AstraAdmin {
216217
return this.db(endpointOrId, regionOrOptions, maybeOptions).admin(this.#defaultOpts.adminOptions);
217218
}
218219

220+
/**
221+
* Fetches the complete information about the database, such as the database name, IDs, region, status, actions, and
222+
* other metadata.
223+
*
224+
* @example
225+
* ```typescript
226+
* const info = await admin.info('<db_id>');
227+
* console.log(info.info.name, info.creationTime);
228+
* ```
229+
*
230+
* @returns A promise that resolves to the complete database information.
231+
*/
232+
public async dbInfo(id: string, options?: WithTimeout): Promise<FullDatabaseInfo> {
233+
const resp = await this._httpClient.request({
234+
method: HttpMethods.Get,
235+
path: `/databases/${id}`,
236+
}, options);
237+
238+
return resp.data as FullDatabaseInfo;
239+
}
240+
219241
/**
220242
* Lists all databases in the current org/account, matching the optionally provided filter.
221243
*

src/devops/astra-db-admin.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,6 @@ export class AstraDbAdmin extends DbAdmin {
101101
* The method issues a request to the DevOps API each time it is invoked, without caching mechanisms;
102102
* this ensures up-to-date information for usages such as real-time collection validation by the application.
103103
*
104-
*
105104
* @example
106105
* ```typescript
107106
* const info = await dbAdmin.info();

tests/integration/devops/lifecycle.test.ts

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -58,12 +58,16 @@ describe('integration.devops.lifecycle', async () => {
5858
}
5959

6060
{
61-
const dbInfo = await asyncDbAdmin.info();
62-
assert.ok(['PENDING', 'INITIALIZING'].includes(dbInfo.status));
63-
assert.strictEqual(dbInfo.info.name, 'astra-test-db');
64-
assert.strictEqual(dbInfo.info.cloudProvider, 'GCP');
65-
assert.strictEqual(dbInfo.info.region, 'us-east1');
66-
assert.strictEqual(dbInfo.info.keyspace, 'my_namespace');
61+
const dbInfo1 = await asyncDbAdmin.info();
62+
assert.ok(['PENDING', 'INITIALIZING'].includes(dbInfo1.status));
63+
assert.strictEqual(dbInfo1.info.name, 'astra-test-db');
64+
assert.strictEqual(dbInfo1.info.cloudProvider, 'GCP');
65+
assert.strictEqual(dbInfo1.info.region, 'us-east1');
66+
assert.strictEqual(dbInfo1.info.keyspace, 'my_namespace');
67+
68+
const dbInfo2 = await admin.dbInfo(asyncDb.id);
69+
assert.deepStrictEqual(dbInfo1.info, dbInfo2.info);
70+
assert.ok(['PENDING', 'INITIALIZING'].includes(dbInfo2.status));
6771
}
6872

6973
const monitoringAdmin = client.admin({ monitorCommands: true });

0 commit comments

Comments
 (0)