1+ import { type DescribeLogDirsRequest , type DescribeLogDirsResponse } from '../../apis/admin/describe-log-dirs-v4.ts'
12import {
23 type AlterClientQuotasRequest ,
34 type AlterClientQuotasResponse ,
@@ -40,6 +41,7 @@ import { MultipleErrors } from '../../errors.ts'
4041import {
4142 adminClientQuotasChannel ,
4243 adminGroupsChannel ,
44+ adminLogDirsChannel ,
4345 adminTopicsChannel ,
4446 createDiagnosticContext
4547} from '../../diagnostic.ts'
@@ -67,7 +69,8 @@ import {
6769 listGroupsOptionsValidator ,
6870 listTopicsOptionsValidator ,
6971 describeClientQuotasOptionsValidator ,
70- alterClientQuotasOptionsValidator
72+ alterClientQuotasOptionsValidator ,
73+ describeLogDirsOptionsValidator
7174} from './options.ts'
7275import {
7376 type AdminOptions ,
@@ -77,11 +80,13 @@ import {
7780 type DeleteTopicsOptions ,
7881 type DescribeClientQuotasOptions ,
7982 type AlterClientQuotasOptions ,
83+ type DescribeLogDirsOptions ,
8084 type DescribeGroupsOptions ,
8185 type Group ,
8286 type GroupBase ,
8387 type ListGroupsOptions ,
84- type ListTopicsOptions
88+ type ListTopicsOptions ,
89+ type BrokerLogDirDescription
8590} from './types.ts'
8691
8792export class Admin extends Base < AdminOptions > {
@@ -353,6 +358,38 @@ export class Admin extends Base<AdminOptions> {
353358 return callback [ kCallbackPromise ]
354359 }
355360
361+ describeLogDirs ( options : DescribeLogDirsOptions , callback : CallbackWithPromise < BrokerLogDirDescription [ ] > ) : void
362+ describeLogDirs ( options : DescribeLogDirsOptions ) : Promise < BrokerLogDirDescription [ ] >
363+ describeLogDirs (
364+ options : DescribeLogDirsOptions ,
365+ callback ?: CallbackWithPromise < BrokerLogDirDescription [ ] >
366+ ) : void | Promise < BrokerLogDirDescription [ ] > {
367+ if ( ! callback ) {
368+ callback = createPromisifiedCallback ( )
369+ }
370+
371+ if ( this [ kCheckNotClosed ] ( callback ) ) {
372+ return callback [ kCallbackPromise ]
373+ }
374+
375+ const validationError = this [ kValidateOptions ] ( options , describeLogDirsOptionsValidator , '/options' , false )
376+ if ( validationError ) {
377+ callback ( validationError , undefined as unknown as BrokerLogDirDescription [ ] )
378+ return callback [ kCallbackPromise ]
379+ }
380+
381+ adminLogDirsChannel . traceCallback (
382+ this . #describeLogDirs,
383+ 1 ,
384+ createDiagnosticContext ( { client : this , operation : 'describeLogDirs' , options } ) ,
385+ this ,
386+ options ,
387+ callback
388+ )
389+
390+ return callback [ kCallbackPromise ]
391+ }
392+
356393 #listTopics ( options : ListTopicsOptions , callback : CallbackWithPromise < string [ ] > ) : void {
357394 const includeInternals = options . includeInternals ?? false
358395
@@ -887,4 +924,59 @@ export class Admin extends Base<AdminOptions> {
887924 0
888925 )
889926 }
927+
928+ #describeLogDirs ( options : DescribeLogDirsOptions , callback : CallbackWithPromise < BrokerLogDirDescription [ ] > ) : void {
929+ this [ kMetadata ] ( { topics : [ ] } , ( error , metadata ) => {
930+ if ( error ) {
931+ callback ( error , undefined as unknown as BrokerLogDirDescription [ ] )
932+ return
933+ }
934+
935+ runConcurrentCallbacks < BrokerLogDirDescription > (
936+ 'Describing log dirs failed.' ,
937+ metadata . brokers ,
938+ ( [ id , broker ] , concurrentCallback ) => {
939+ this [ kGetConnection ] ( broker , ( error , connection ) => {
940+ if ( error ) {
941+ concurrentCallback ( error , undefined as unknown as BrokerLogDirDescription )
942+ return
943+ }
944+
945+ this [ kPerformWithRetry ] < DescribeLogDirsResponse > (
946+ 'describeLogDirs' ,
947+ retryCallback => {
948+ this [ kGetApi ] < DescribeLogDirsRequest , DescribeLogDirsResponse > ( 'DescribeLogDirs' , ( error , api ) => {
949+ if ( error ) {
950+ retryCallback ( error , undefined as unknown as DescribeLogDirsResponse )
951+ return
952+ }
953+
954+ api ( connection , options . topics , retryCallback as unknown as Callback < DescribeLogDirsResponse > )
955+ } )
956+ } ,
957+ ( error , response ) => {
958+ if ( error ) {
959+ concurrentCallback ( error , undefined as unknown as BrokerLogDirDescription )
960+ return
961+ }
962+
963+ concurrentCallback ( null , {
964+ broker : id ,
965+ throttleTimeMs : response . throttleTimeMs ,
966+ results : response . results . map ( result => ( {
967+ logDir : result . logDir ,
968+ topics : result . topics ,
969+ totalBytes : result . totalBytes ,
970+ usableBytes : result . usableBytes
971+ } ) )
972+ } )
973+ } ,
974+ 0
975+ )
976+ } )
977+ } ,
978+ callback
979+ )
980+ } )
981+ }
890982}
0 commit comments