@@ -140,6 +140,16 @@ export interface PluginService extends ErrorHandler {
140140 getTelemetryFactory ( ) : TelemetryFactory ;
141141
142142 setAllowedAndBlockedHosts ( allowedAndBlockedHosts : AllowedAndBlockedHosts ) : void ;
143+
144+ setStatus < T > ( clazz : any , status : T | null , clusterBound : boolean ) : void ;
145+
146+ setStatus < T > ( clazz : any , status : T | null , key : string ) : void ;
147+
148+ getStatus < T > ( clazz : any , clusterBound : boolean ) : T ;
149+
150+ getStatus < T > ( clazz : any , key : string ) : T ;
151+
152+ isPluginInUse ( plugin : any ) : boolean ;
143153}
144154
145155export class PluginServiceImpl implements PluginService , HostListProviderService {
@@ -159,6 +169,8 @@ export class PluginServiceImpl implements PluginService, HostListProviderService
159169 protected static readonly hostAvailabilityExpiringCache : CacheMap < string , HostAvailability > = new CacheMap < string , HostAvailability > ( ) ;
160170 readonly props : Map < string , any > ;
161171 private allowedAndBlockedHosts : AllowedAndBlockedHosts | null = null ;
172+ protected static readonly statusesExpiringCache : CacheMap < string , any > = new CacheMap ( ) ;
173+ protected static readonly DEFAULT_STATUS_CACHE_EXPIRE_NANO : number = 3_600_000_000_000 ; // 60 minutes
162174
163175 constructor (
164176 container : PluginServiceManagerContainer ,
@@ -686,6 +698,10 @@ export class PluginServiceImpl implements PluginService, HostListProviderService
686698 return this . getDialect ( ) . getErrorHandler ( ) . isNetworkError ( e ) ;
687699 }
688700
701+ isSyntaxError ( e : Error ) : boolean {
702+ return this . getDialect ( ) . getErrorHandler ( ) . isSyntaxError ( e ) ;
703+ }
704+
689705 hasLoginError ( ) : boolean {
690706 return this . getDialect ( ) . getErrorHandler ( ) . hasLoginError ( ) ;
691707 }
@@ -713,4 +729,53 @@ export class PluginServiceImpl implements PluginService, HostListProviderService
713729 static clearHostAvailabilityCache ( ) : void {
714730 PluginServiceImpl . hostAvailabilityExpiringCache . clear ( ) ;
715731 }
732+
733+ getStatus < T > ( clazz : any , clusterBound : boolean ) : T ;
734+ getStatus < T > ( clazz : any , key : string ) : T ;
735+ getStatus < T > ( clazz : any , clusterBound : boolean | string ) : T {
736+ if ( typeof clusterBound === "string" ) {
737+ return < T > PluginServiceImpl . statusesExpiringCache . get ( this . getStatusCacheKey ( clazz , clusterBound ) ) ;
738+ }
739+ let clusterId : string = null ;
740+ if ( clusterBound ) {
741+ try {
742+ clusterId = this . _hostListProvider . getClusterId ( ) ;
743+ } catch ( e ) {
744+ // Do nothing
745+ }
746+ }
747+ return this . getStatus ( clazz , clusterId ) ;
748+ }
749+
750+ protected getStatusCacheKey < T > ( clazz : T , key : string ) : string {
751+ return `${ ! key ? "" : key . trim ( ) . toLowerCase ( ) } ::${ clazz . toString ( ) } ` ;
752+ }
753+
754+ setStatus < T > ( clazz : any , status : T | null , clusterBound : boolean ) : void ;
755+ setStatus < T > ( clazz : any , status : T | null , key : string ) : void ;
756+ setStatus < T > ( clazz : any , status : T , clusterBound : boolean | string ) : void {
757+ if ( typeof clusterBound === "string" ) {
758+ const cacheKey : string = this . getStatusCacheKey ( clazz , clusterBound ) ;
759+ if ( ! status ) {
760+ PluginServiceImpl . statusesExpiringCache . delete ( cacheKey ) ;
761+ } else {
762+ PluginServiceImpl . statusesExpiringCache . put ( cacheKey , status , PluginServiceImpl . DEFAULT_STATUS_CACHE_EXPIRE_NANO ) ;
763+ }
764+ return ;
765+ }
766+
767+ let clusterId : string | null = null ;
768+ if ( clusterBound ) {
769+ try {
770+ clusterId = this . _hostListProvider . getClusterId ( ) ;
771+ } catch ( e ) {
772+ // Do nothing
773+ }
774+ }
775+ this . setStatus ( clazz , status , clusterId ) ;
776+ }
777+
778+ isPluginInUse ( plugin : any ) {
779+ return this . pluginServiceManagerContainer . pluginManager ! . isPluginInUse ( plugin ) ;
780+ }
716781}
0 commit comments