mirror of
https://github.com/lensapp/lens.git
synced 2025-05-20 05:10:56 +00:00
Restructure to monorepo (#6907)
* wip: restructure to monorepo Signed-off-by: Jari Kolehmainen <jari.kolehmainen@gmail.com> * refactor create-release-pr to a package Signed-off-by: Jari Kolehmainen <jari.kolehmainen@gmail.com> * build fixes Signed-off-by: Jari Kolehmainen <jari.kolehmainen@gmail.com> * github workflow fixes Signed-off-by: Jari Kolehmainen <jari.kolehmainen@gmail.com> * fix typo Signed-off-by: Jari Kolehmainen <jari.kolehmainen@gmail.com> * add webpack-env types to core Signed-off-by: Jari Kolehmainen <jari.kolehmainen@gmail.com> * fix github workflows Signed-off-by: Jari Kolehmainen <jari.kolehmainen@gmail.com> * refactor/fix integration tests Signed-off-by: Jari Kolehmainen <jari.kolehmainen@gmail.com> * lint fix Signed-off-by: Jari Kolehmainen <jari.kolehmainen@gmail.com> * yarn run dev Signed-off-by: Jari Kolehmainen <jari.kolehmainen@gmail.com> * eslint settings for vscode Signed-off-by: Jari Kolehmainen <jari.kolehmainen@gmail.com> * move templates to right package Signed-off-by: Jari Kolehmainen <jari.kolehmainen@gmail.com> * open-lens build fixes Signed-off-by: Jari Kolehmainen <jari.kolehmainen@gmail.com> * integration test fix Signed-off-by: Jari Kolehmainen <jari.kolehmainen@gmail.com> * fix nx task dependencies Signed-off-by: Jari Kolehmainen <jari.kolehmainen@gmail.com> * use bash shell for unit tests in test workflow Signed-off-by: Jari Kolehmainen <jari.kolehmainen@gmail.com> * fix test:unit for windows Signed-off-by: Jari Kolehmainen <jari.kolehmainen@gmail.com> * fix win-ca webpack error in open-lens Signed-off-by: Jari Kolehmainen <jari.kolehmainen@gmail.com> * fix win-ca webpack error in open-lens Signed-off-by: Jari Kolehmainen <jari.kolehmainen@gmail.com> * fix build:app on windows Signed-off-by: Jari Kolehmainen <jari.kolehmainen@gmail.com> * remove ELECTRON_BUILDER_EXTRA_ARGS Signed-off-by: Jari Kolehmainen <jari.kolehmainen@gmail.com> * sync src/ from master Signed-off-by: Jari Kolehmainen <jari.kolehmainen@gmail.com> * remove Makefile from core Signed-off-by: Jari Kolehmainen <jari.kolehmainen@gmail.com> Signed-off-by: Jari Kolehmainen <jari.kolehmainen@gmail.com>
This commit is contained in:
1 parent
0066ca4ea2
commit
2657df2293
3321 files changed
+28699
-11447
No files matched your search
@@ -0,0 +1,103 @@
|
||||
/**
|
||||
* Copyright (c) OpenLens Authors. All rights reserved.
|
||||
* Licensed under MIT License. See LICENSE in root directory for more information.
|
||||
*/
|
||||
|
||||
import type { CoreV1Api } from "@kubernetes/client-node";
|
||||
import { getInjectionToken } from "@ogre-tools/injectable";
|
||||
import { isRequestError } from "../../common/utils";
|
||||
|
||||
export interface PrometheusService extends PrometheusServiceInfo {
|
||||
kind: string;
|
||||
}
|
||||
|
||||
export interface PrometheusServiceInfo {
|
||||
namespace: string;
|
||||
service: string;
|
||||
port: number;
|
||||
}
|
||||
|
||||
export interface PrometheusProvider {
|
||||
readonly kind: string;
|
||||
readonly name: string;
|
||||
readonly isConfigurable: boolean;
|
||||
|
||||
getQuery(opts: Record<string, string>, queryName: string): string;
|
||||
getPrometheusService(client: CoreV1Api): Promise<PrometheusService>;
|
||||
}
|
||||
|
||||
export interface CreatePrometheusProviderOpts {
|
||||
readonly kind: string;
|
||||
readonly name: string;
|
||||
readonly isConfigurable: boolean;
|
||||
|
||||
getQuery(opts: Record<string, string>, queryName: string): string;
|
||||
getService(client: CoreV1Api): Promise<PrometheusServiceInfo>;
|
||||
}
|
||||
|
||||
export const createPrometheusProvider = ({ getService, ...opts }: CreatePrometheusProviderOpts): PrometheusProvider => ({
|
||||
...opts,
|
||||
getPrometheusService: async (client) => {
|
||||
try {
|
||||
return {
|
||||
kind: opts.kind,
|
||||
...await getService(client),
|
||||
};
|
||||
} catch (error) {
|
||||
throw new Error(`Failed to find Prometheus provider for "${opts.name}"`, { cause: error });
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
export async function findFirstNamespacedService(client: CoreV1Api, ...selectors: string[]): Promise<PrometheusServiceInfo> {
|
||||
try {
|
||||
for (const selector of selectors) {
|
||||
const { body: { items: [service] }} = await client.listServiceForAllNamespaces(undefined, undefined, undefined, selector);
|
||||
|
||||
if (service?.metadata?.namespace && service.metadata.name && service.spec?.ports) {
|
||||
return {
|
||||
namespace: service.metadata.namespace,
|
||||
service: service.metadata.name,
|
||||
port: service.spec.ports[0].port,
|
||||
};
|
||||
}
|
||||
}
|
||||
} catch (error) {
|
||||
throw new Error(`Failed to list services in all namespaces: ${isRequestError(error) ? error.response?.body.message : error}`);
|
||||
}
|
||||
|
||||
throw new Error(`No service found from any namespace`);
|
||||
}
|
||||
|
||||
export async function findNamespacedService(client: CoreV1Api, name: string, namespace: string): Promise<PrometheusServiceInfo> {
|
||||
try {
|
||||
const { body: service } = await client.readNamespacedService(name, namespace);
|
||||
|
||||
if (!service.metadata?.namespace || !service.metadata.name || !service.spec?.ports) {
|
||||
throw new Error(`Service found in namespace="${namespace}" did not have required information`);
|
||||
}
|
||||
|
||||
return {
|
||||
namespace: service.metadata.namespace,
|
||||
service: service.metadata.name,
|
||||
port: service.spec.ports[0].port,
|
||||
};
|
||||
} catch(error) {
|
||||
throw new Error(`Failed to list services in namespace="${namespace}": ${isRequestError(error) ? error.response?.body.message : error}`);
|
||||
}
|
||||
}
|
||||
|
||||
export interface BytesSentArgs {
|
||||
rateAccuracy: string;
|
||||
ingress: string;
|
||||
namespace: string;
|
||||
statuses: string;
|
||||
}
|
||||
|
||||
export function bytesSent({ rateAccuracy, ingress, namespace, statuses }: BytesSentArgs): string {
|
||||
return `sum(rate(nginx_ingress_controller_bytes_sent_sum{ingress="${ingress}",namespace="${namespace}",status=~"${statuses}"}[${rateAccuracy}])) by (ingress, namespace)`;
|
||||
}
|
||||
|
||||
export const prometheusProviderInjectionToken = getInjectionToken<PrometheusProvider>({
|
||||
id: "prometheus-provider",
|
||||
});
|
||||
Reference in new issue
Block a user