diff --git a/.changeset/clever-beans-turn.md b/.changeset/clever-beans-turn.md new file mode 100644 index 0000000000..69846a2516 --- /dev/null +++ b/.changeset/clever-beans-turn.md @@ -0,0 +1,8 @@ +--- +'@backstage/plugin-kafka': patch +'@backstage/plugin-kafka-backend': patch +'@backstage/plugin-lighthouse': patch +'@backstage/plugin-proxy-backend': patch +--- + +Minor API signatures cleanup diff --git a/plugins/kafka-backend/api-report.md b/plugins/kafka-backend/api-report.md index e73d8e9e03..20c8260b52 100644 --- a/plugins/kafka-backend/api-report.md +++ b/plugins/kafka-backend/api-report.md @@ -7,9 +7,14 @@ import { Config } from '@backstage/config'; import express from 'express'; import { Logger } from 'winston'; -// Warning: (ae-forgotten-export) The symbol "RouterOptions" needs to be exported by the entry point index.d.ts -// Warning: (ae-missing-release-tag) "createRouter" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) export function createRouter(options: RouterOptions): Promise; + +// @public (undocumented) +export interface RouterOptions { + // (undocumented) + config: Config; + // (undocumented) + logger: Logger; +} ``` diff --git a/plugins/kafka-backend/src/index.ts b/plugins/kafka-backend/src/index.ts index ab1026e99d..70b7fb45a4 100644 --- a/plugins/kafka-backend/src/index.ts +++ b/plugins/kafka-backend/src/index.ts @@ -20,4 +20,5 @@ * @packageDocumentation */ +export type { RouterOptions } from './service/router'; export { createRouter } from './service/router'; diff --git a/plugins/kafka-backend/src/service/router.ts b/plugins/kafka-backend/src/service/router.ts index 6c8bce7af3..1271e8f48c 100644 --- a/plugins/kafka-backend/src/service/router.ts +++ b/plugins/kafka-backend/src/service/router.ts @@ -23,6 +23,7 @@ import { KafkaApi, KafkaJsApiImpl } from './KafkaApi'; import _ from 'lodash'; import { getClusterDetails } from '../config/ClusterReader'; +/** @public */ export interface RouterOptions { logger: Logger; config: Config; @@ -84,6 +85,7 @@ export const makeRouter = ( return router; }; +/** @public */ export async function createRouter( options: RouterOptions, ): Promise { diff --git a/plugins/kafka/api-report.md b/plugins/kafka/api-report.md index 844082764e..18b51b77fa 100644 --- a/plugins/kafka/api-report.md +++ b/plugins/kafka/api-report.md @@ -9,26 +9,18 @@ import { BackstagePlugin } from '@backstage/core-plugin-api'; import { Entity } from '@backstage/catalog-model'; import { RouteRef } from '@backstage/core-plugin-api'; -// Warning: (ae-missing-release-tag) "EntityKafkaContent" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) -export const EntityKafkaContent: (_props: {}) => JSX.Element; +export const EntityKafkaContent: () => JSX.Element; -// Warning: (ae-missing-release-tag) "isPluginApplicableToEntity" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) const isPluginApplicableToEntity: (entity: Entity) => boolean; export { isPluginApplicableToEntity as isKafkaAvailable }; export { isPluginApplicableToEntity }; -// Warning: (ae-missing-release-tag) "KAFKA_CONSUMER_GROUP_ANNOTATION" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) export const KAFKA_CONSUMER_GROUP_ANNOTATION = 'kafka.apache.org/consumer-groups'; -// Warning: (ae-missing-release-tag) "kafkaPlugin" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) const kafkaPlugin: BackstagePlugin< { @@ -40,9 +32,6 @@ const kafkaPlugin: BackstagePlugin< export { kafkaPlugin }; export { kafkaPlugin as plugin }; -// Warning: (ae-forgotten-export) The symbol "Props" needs to be exported by the entry point index.d.ts -// Warning: (ae-missing-release-tag) "Router" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) -export const Router: (_props: Props) => JSX.Element; +export const Router: () => JSX.Element; ``` diff --git a/plugins/kafka/src/Router.tsx b/plugins/kafka/src/Router.tsx index 133326b5b9..af6d2d7ef8 100644 --- a/plugins/kafka/src/Router.tsx +++ b/plugins/kafka/src/Router.tsx @@ -22,12 +22,12 @@ import { KAFKA_CONSUMER_GROUP_ANNOTATION } from './constants'; import { KafkaTopicsForConsumer } from './components/ConsumerGroupOffsets/ConsumerGroupOffsets'; import { MissingAnnotationEmptyState } from '@backstage/core-components'; +/** @public */ export const isPluginApplicableToEntity = (entity: Entity) => Boolean(entity.metadata.annotations?.[KAFKA_CONSUMER_GROUP_ANNOTATION]); -type Props = {}; - -export const Router = (_props: Props) => { +/** @public */ +export const Router = () => { const { entity } = useEntity(); if (!isPluginApplicableToEntity(entity)) { diff --git a/plugins/kafka/src/constants.ts b/plugins/kafka/src/constants.ts index b85a738888..a900ec6abe 100644 --- a/plugins/kafka/src/constants.ts +++ b/plugins/kafka/src/constants.ts @@ -13,6 +13,9 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + +/** @public */ export const KAFKA_CONSUMER_GROUP_ANNOTATION = 'kafka.apache.org/consumer-groups'; + export const KAFKA_DASHBOARD_URL = 'kafka.apache.org/dashboard-urls'; diff --git a/plugins/kafka/src/plugin.ts b/plugins/kafka/src/plugin.ts index 6caa4ca5ca..395152729b 100644 --- a/plugins/kafka/src/plugin.ts +++ b/plugins/kafka/src/plugin.ts @@ -26,10 +26,12 @@ import { } from '@backstage/core-plugin-api'; import { KafkaDashboardClient } from './api/KafkaDashboardClient'; +/** @public */ export const rootCatalogKafkaRouteRef = createRouteRef({ id: 'kafka', }); +/** @public */ export const kafkaPlugin = createPlugin({ id: 'kafka', apis: [ @@ -50,6 +52,7 @@ export const kafkaPlugin = createPlugin({ }, }); +/** @public */ export const EntityKafkaContent = kafkaPlugin.provide( createRoutableExtension({ name: 'EntityKafkaContent', diff --git a/plugins/lighthouse/api-report.md b/plugins/lighthouse/api-report.md index a53bef3cb0..17c771e187 100644 --- a/plugins/lighthouse/api-report.md +++ b/plugins/lighthouse/api-report.md @@ -12,14 +12,19 @@ import { Entity } from '@backstage/catalog-model'; import { InfoCardVariants } from '@backstage/core-components'; import { RouteRef } from '@backstage/core-plugin-api'; -// Warning: (ae-missing-release-tag) "Audit" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) export type Audit = AuditRunning | AuditFailed | AuditCompleted; -// Warning: (ae-forgotten-export) The symbol "AuditBase" needs to be exported by the entry point index.d.ts -// Warning: (ae-missing-release-tag) "AuditCompleted" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// +// @public (undocumented) +export interface AuditBase { + // (undocumented) + id: string; + // (undocumented) + timeCreated: string; + // (undocumented) + url: string; +} + // @public (undocumented) export interface AuditCompleted extends AuditBase { // (undocumented) @@ -32,8 +37,6 @@ export interface AuditCompleted extends AuditBase { timeCompleted: string; } -// Warning: (ae-missing-release-tag) "AuditFailed" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) export interface AuditFailed extends AuditBase { // (undocumented) @@ -42,38 +45,24 @@ export interface AuditFailed extends AuditBase { timeCompleted: string; } -// Warning: (ae-missing-release-tag) "AuditRunning" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) export interface AuditRunning extends AuditBase { // (undocumented) status: 'RUNNING'; } -// Warning: (ae-forgotten-export) The symbol "Props" needs to be exported by the entry point index.d.ts -// Warning: (ae-missing-release-tag) "EmbeddedRouter" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) -export const EmbeddedRouter: (_props: Props) => JSX.Element; +export const EmbeddedRouter: () => JSX.Element; -// Warning: (ae-missing-release-tag) "EntityLastLighthouseAuditCard" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) -export const EntityLastLighthouseAuditCard: ({ - dense, - variant, -}: { +export const EntityLastLighthouseAuditCard: (props: { dense?: boolean | undefined; variant?: InfoCardVariants | undefined; }) => JSX.Element; -// Warning: (ae-missing-release-tag) "EntityLighthouseContent" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) -export const EntityLighthouseContent: (_props: {}) => JSX.Element; +export const EntityLighthouseContent: () => JSX.Element; -// Warning: (ae-missing-release-tag) "FetchError" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) export class FetchError extends Error { // (undocumented) @@ -82,15 +71,11 @@ export class FetchError extends Error { get name(): string; } -// Warning: (ae-missing-release-tag) "isLighthouseAvailable" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) const isLighthouseAvailable: (entity: Entity) => boolean; export { isLighthouseAvailable }; export { isLighthouseAvailable as isPluginApplicableToEntity }; -// Warning: (ae-missing-release-tag) "LASListRequest" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) export interface LASListRequest { // (undocumented) @@ -99,8 +84,6 @@ export interface LASListRequest { offset?: number; } -// Warning: (ae-missing-release-tag) "LASListResponse" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) export interface LASListResponse { // (undocumented) @@ -113,19 +96,12 @@ export interface LASListResponse { total: number; } -// Warning: (ae-missing-release-tag) "LastLighthouseAuditCard" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) -export const LastLighthouseAuditCard: ({ - dense, - variant, -}: { - dense?: boolean | undefined; - variant?: InfoCardVariants | undefined; +export const LastLighthouseAuditCard: (props: { + dense?: boolean; + variant?: InfoCardVariants; }) => JSX.Element; -// Warning: (ae-missing-release-tag) "LighthouseApi" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) export type LighthouseApi = { url: string; @@ -135,13 +111,9 @@ export type LighthouseApi = { getWebsiteByUrl: (websiteUrl: string) => Promise; }; -// Warning: (ae-missing-release-tag) "lighthouseApiRef" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) export const lighthouseApiRef: ApiRef; -// Warning: (ae-missing-release-tag) "LighthouseCategoryAbbr" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) export interface LighthouseCategoryAbbr { // (undocumented) @@ -152,8 +124,6 @@ export interface LighthouseCategoryAbbr { title: string; } -// Warning: (ae-missing-release-tag) "LighthouseCategoryId" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) export type LighthouseCategoryId = | 'pwa' @@ -162,13 +132,9 @@ export type LighthouseCategoryId = | 'accessibility' | 'best-practices'; -// Warning: (ae-missing-release-tag) "LighthousePage" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) export const LighthousePage: () => JSX.Element; -// Warning: (ae-missing-release-tag) "lighthousePlugin" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) const lighthousePlugin: BackstagePlugin< { @@ -181,8 +147,6 @@ const lighthousePlugin: BackstagePlugin< export { lighthousePlugin }; export { lighthousePlugin as plugin }; -// Warning: (ae-missing-release-tag) "LighthouseRestApi" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) export class LighthouseRestApi implements LighthouseApi { constructor(url: string); @@ -193,23 +157,16 @@ export class LighthouseRestApi implements LighthouseApi { // (undocumented) getWebsiteForAuditId(auditId: string): Promise; // (undocumented) - getWebsiteList({ - limit, - offset, - }?: LASListRequest): Promise; + getWebsiteList(options?: LASListRequest): Promise; // (undocumented) triggerAudit(payload: TriggerAuditPayload): Promise; // (undocumented) url: string; } -// Warning: (ae-missing-release-tag) "Router" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) export const Router: () => JSX.Element; -// Warning: (ae-missing-release-tag) "TriggerAuditPayload" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) export interface TriggerAuditPayload { // (undocumented) @@ -224,8 +181,6 @@ export interface TriggerAuditPayload { url: string; } -// Warning: (ae-missing-release-tag) "Website" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) export interface Website { // (undocumented) @@ -236,8 +191,6 @@ export interface Website { url: string; } -// Warning: (ae-missing-release-tag) "WebsiteListResponse" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) export type WebsiteListResponse = LASListResponse; ``` diff --git a/plugins/lighthouse/src/Router.tsx b/plugins/lighthouse/src/Router.tsx index 1c41f522f4..04c00cde41 100644 --- a/plugins/lighthouse/src/Router.tsx +++ b/plugins/lighthouse/src/Router.tsx @@ -25,9 +25,11 @@ import { LIGHTHOUSE_WEBSITE_URL_ANNOTATION } from '../constants'; import { AuditListForEntity } from './components/AuditList/AuditListForEntity'; import { MissingAnnotationEmptyState } from '@backstage/core-components'; +/** @public */ export const isLighthouseAvailable = (entity: Entity) => Boolean(entity.metadata.annotations?.[LIGHTHOUSE_WEBSITE_URL_ANNOTATION]); +/** @public */ export const Router = () => ( } /> @@ -36,9 +38,8 @@ export const Router = () => ( ); -type Props = {}; - -export const EmbeddedRouter = (_props: Props) => { +/** @public */ +export const EmbeddedRouter = () => { const { entity } = useEntity(); if (!isLighthouseAvailable(entity)) { diff --git a/plugins/lighthouse/src/api.ts b/plugins/lighthouse/src/api.ts index b40b70356f..e4ccefe2a1 100644 --- a/plugins/lighthouse/src/api.ts +++ b/plugins/lighthouse/src/api.ts @@ -17,6 +17,7 @@ import { Config } from '@backstage/config'; import { createApiRef } from '@backstage/core-plugin-api'; +/** @public */ export type LighthouseCategoryId = | 'pwa' | 'seo' @@ -24,17 +25,20 @@ export type LighthouseCategoryId = | 'accessibility' | 'best-practices'; +/** @public */ export interface LighthouseCategoryAbbr { id: LighthouseCategoryId; score: number; title: string; } +/** @public */ export interface LASListRequest { offset?: number; limit?: number; } +/** @public */ export interface LASListResponse { items: Item[]; total: number; @@ -42,21 +46,25 @@ export interface LASListResponse { limit: number; } -interface AuditBase { +/** @public */ +export interface AuditBase { id: string; url: string; timeCreated: string; } +/** @public */ export interface AuditRunning extends AuditBase { status: 'RUNNING'; } +/** @public */ export interface AuditFailed extends AuditBase { status: 'FAILED'; timeCompleted: string; } +/** @public */ export interface AuditCompleted extends AuditBase { status: 'COMPLETED'; timeCompleted: string; @@ -64,16 +72,20 @@ export interface AuditCompleted extends AuditBase { categories: Record; } +/** @public */ export type Audit = AuditRunning | AuditFailed | AuditCompleted; +/** @public */ export interface Website { url: string; audits: Audit[]; lastAudit: Audit; } +/** @public */ export type WebsiteListResponse = LASListResponse; +/** @public */ export interface TriggerAuditPayload { url: string; options: { @@ -85,6 +97,7 @@ export interface TriggerAuditPayload { }; } +/** @public */ export class FetchError extends Error { get name(): string { return this.constructor.name; @@ -99,6 +112,7 @@ export class FetchError extends Error { } } +/** @public */ export type LighthouseApi = { url: string; getWebsiteList: (listOptions: LASListRequest) => Promise; @@ -107,10 +121,12 @@ export type LighthouseApi = { getWebsiteByUrl: (websiteUrl: string) => Promise; }; +/** @public */ export const lighthouseApiRef = createApiRef({ id: 'plugin.lighthouse.service', }); +/** @public */ export class LighthouseRestApi implements LighthouseApi { static fromConfig(config: Config) { return new LighthouseRestApi(config.getString('lighthouse.baseUrl')); @@ -124,10 +140,10 @@ export class LighthouseRestApi implements LighthouseApi { return await resp.json(); } - async getWebsiteList({ - limit, - offset, - }: LASListRequest = {}): Promise { + async getWebsiteList( + options: LASListRequest = {}, + ): Promise { + const { limit, offset } = options; const params = new URLSearchParams(); if (typeof limit === 'number') params.append('limit', limit.toString()); if (typeof offset === 'number') params.append('offset', offset.toString()); diff --git a/plugins/lighthouse/src/components/Cards/LastLighthouseAuditCard.tsx b/plugins/lighthouse/src/components/Cards/LastLighthouseAuditCard.tsx index fc44397330..4daeb5177c 100644 --- a/plugins/lighthouse/src/components/Cards/LastLighthouseAuditCard.tsx +++ b/plugins/lighthouse/src/components/Cards/LastLighthouseAuditCard.tsx @@ -27,8 +27,8 @@ import { StructuredMetadataTable, } from '@backstage/core-components'; -const LighthouseCategoryScoreStatus = ({ score }: { score: number }) => { - const scoreAsPercentage = Math.round(score * 100); +const LighthouseCategoryScoreStatus = (props: { score: number }) => { + const scoreAsPercentage = Math.round(props.score * 100); switch (true) { case scoreAsPercentage >= 90: return ( @@ -56,20 +56,15 @@ const LighthouseCategoryScoreStatus = ({ score }: { score: number }) => { } }; -const LighthouseAuditStatus = ({ audit }: { audit: Audit }) => ( +const LighthouseAuditStatus = (props: { audit: Audit }) => ( <> - - {audit.status.toLocaleUpperCase('en-US')} + + {props.audit.status.toLocaleUpperCase('en-US')} ); -const LighthouseAuditSummary = ({ - audit, - dense = false, -}: { - audit: Audit; - dense?: boolean; -}) => { +const LighthouseAuditSummary = (props: { audit: Audit; dense?: boolean }) => { + const { audit, dense = false } = props; const { url } = audit; const flattenedCategoryData: Record = {}; if (audit.status === 'COMPLETED') { @@ -92,13 +87,12 @@ const LighthouseAuditSummary = ({ return ; }; -export const LastLighthouseAuditCard = ({ - dense = false, - variant, -}: { +/** @public */ +export const LastLighthouseAuditCard = (props: { dense?: boolean; variant?: InfoCardVariants; }) => { + const { dense = false, variant } = props; const { value: website, loading, error } = useWebsiteForEntity(); let content; diff --git a/plugins/lighthouse/src/plugin.ts b/plugins/lighthouse/src/plugin.ts index 1c9bc295f8..24052f7771 100644 --- a/plugins/lighthouse/src/plugin.ts +++ b/plugins/lighthouse/src/plugin.ts @@ -40,6 +40,7 @@ export const entityContentRouteRef = createRouteRef({ id: 'lighthouse:entity-content', }); +/** @public */ export const lighthousePlugin = createPlugin({ id: 'lighthouse', apis: [ @@ -55,6 +56,7 @@ export const lighthousePlugin = createPlugin({ }, }); +/** @public */ export const LighthousePage = lighthousePlugin.provide( createRoutableExtension({ name: 'LighthousePage', @@ -63,6 +65,7 @@ export const LighthousePage = lighthousePlugin.provide( }), ); +/** @public */ export const EntityLighthouseContent = lighthousePlugin.provide( createRoutableExtension({ name: 'EntityLighthouseContent', @@ -71,6 +74,7 @@ export const EntityLighthouseContent = lighthousePlugin.provide( }), ); +/** @public */ export const EntityLastLighthouseAuditCard = lighthousePlugin.provide( createComponentExtension({ name: 'EntityLastLighthouseAuditCard', diff --git a/plugins/proxy-backend/api-report.md b/plugins/proxy-backend/api-report.md index 45ef63f4d9..b6497adbaf 100644 --- a/plugins/proxy-backend/api-report.md +++ b/plugins/proxy-backend/api-report.md @@ -8,9 +8,18 @@ import express from 'express'; import { Logger } from 'winston'; import { PluginEndpointDiscovery } from '@backstage/backend-common'; -// Warning: (ae-forgotten-export) The symbol "RouterOptions" needs to be exported by the entry point index.d.ts -// Warning: (ae-missing-release-tag) "createRouter" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) export function createRouter(options: RouterOptions): Promise; + +// @public (undocumented) +export interface RouterOptions { + // (undocumented) + config: Config; + // (undocumented) + discovery: PluginEndpointDiscovery; + // (undocumented) + logger: Logger; + // (undocumented) + skipInvalidProxies?: boolean; +} ``` diff --git a/plugins/proxy-backend/src/service/index.ts b/plugins/proxy-backend/src/service/index.ts index d87e53b5c1..31d50951fd 100644 --- a/plugins/proxy-backend/src/service/index.ts +++ b/plugins/proxy-backend/src/service/index.ts @@ -14,4 +14,5 @@ * limitations under the License. */ +export type { RouterOptions } from './router'; export { createRouter } from './router'; diff --git a/plugins/proxy-backend/src/service/router.ts b/plugins/proxy-backend/src/service/router.ts index e0910da145..b7ee7014bc 100644 --- a/plugins/proxy-backend/src/service/router.ts +++ b/plugins/proxy-backend/src/service/router.ts @@ -47,6 +47,7 @@ const safeForwardHeaders = [ 'user-agent', ]; +/** @public */ export interface RouterOptions { logger: Logger; config: Config; @@ -177,6 +178,7 @@ export function buildMiddleware( return createProxyMiddleware(filter, fullConfig); } +/** @public */ export async function createRouter( options: RouterOptions, ): Promise { diff --git a/scripts/api-extractor.ts b/scripts/api-extractor.ts index 32b27e06ca..f047c08873 100644 --- a/scripts/api-extractor.ts +++ b/scripts/api-extractor.ts @@ -236,15 +236,11 @@ const ALLOW_WARNINGS = [ 'plugins/ilert', 'plugins/jenkins', 'plugins/jenkins-backend', - 'plugins/kafka', - 'plugins/kafka-backend', 'plugins/kubernetes', 'plugins/kubernetes-common', - 'plugins/lighthouse', 'plugins/newrelic', 'plugins/newrelic-dashboard', 'plugins/pagerduty', - 'plugins/proxy-backend', 'plugins/rollbar', 'plugins/rollbar-backend', 'plugins/search-backend-module-pg',