File

src/cost/cost.provider.ts

Index

Properties
Methods

Methods

getCostProvider
getCostProvider(provider: string)
Parameters :
Name Type Optional
provider string No
Returns : any
getCostProviderCategories
getCostProviderCategories()
Returns : any

Properties

Private costProvider
Type : object
Default value : { [provider.kubecost]: new KubecostProvider(), [provider.aws]: new AWSCostProvider(), [provider.azure]: new AzureProvider(), [provider.openai]: new OpenAIProvider(this.opentelemetryProvider), [provider.anthropic]: new AnthropicProvider(this.opentelemetryProvider), }
Private costProviderCategoryMap
Type : object
Default value : { [CostProviderCategory.cloud]: { title: "Cloud services", subtitle: "Infrastructures", description: "Monitor spending on cloud infrastructure and services such as computing resources, storage, and data transfer.", providers: [provider.kubecost, provider.aws, provider.azure], }, [CostProviderCategory.llm]: { title: "LLMs", subtitle: "3rd party services", description: "Monitor spending on LLMs models usage.", providers: [provider.openai, provider.anthropic], }, // [CostProviderCategory.other]: { // title: "Other services", // subtitle: "3rd party services", // description: // "Monitor spending using a generic connection through an OpenTelemetry endpoint", // providers: [], // }, }
Private opentelemetryProvider
Default value : new OpentelemetryProvider( new InfluxDbProvider(), )
import { AWSCostProvider } from "../providers/aws/aws.provider";
import { AzureProvider } from "../providers/azure/azure.provider";
import { KubecostProvider } from "../providers/kubecost/kubecost.provider";
import { Injectable } from "@nestjs/common";
import {
  CostProvider as provider,
  CostProviderCategory,
} from "./types/cost-provider.enum";
import { OpentelemetryProvider } from "../providers/opentelemetry/opentelemetry.provider";
import { InfluxDbProvider } from "../providers/influxDB/influxdb.provider";
import { OpenAIProvider } from "../providers/openai/openai.provider";
import { AnthropicProvider } from "../providers/anthropic/anthropic.provider";

@Injectable()
export class CostProvider {
  private opentelemetryProvider = new OpentelemetryProvider(
    new InfluxDbProvider(),
  );
  private costProvider = {
    [provider.kubecost]: new KubecostProvider(),
    [provider.aws]: new AWSCostProvider(),
    [provider.azure]: new AzureProvider(),
    [provider.openai]: new OpenAIProvider(this.opentelemetryProvider),
    [provider.anthropic]: new AnthropicProvider(this.opentelemetryProvider),
  };

  private costProviderCategoryMap = {
    [CostProviderCategory.cloud]: {
      title: "Cloud services",
      subtitle: "Infrastructures",
      description:
        "Monitor spending on cloud infrastructure and services such as computing resources, storage, and data transfer.",
      providers: [provider.kubecost, provider.aws, provider.azure],
    },
    [CostProviderCategory.llm]: {
      title: "LLMs",
      subtitle: "3rd party services",
      description: "Monitor spending on LLMs models usage.",
      providers: [provider.openai, provider.anthropic],
    },
    // [CostProviderCategory.other]: {
    //   title: "Other services",
    //   subtitle: "3rd party services",
    //   description:
    //     "Monitor spending using a generic connection through an OpenTelemetry endpoint",
    //   providers: [],
    // },
  };

  getCostProvider(provider: string) {
    return this.costProvider[provider];
  }

  getCostProviderCategories() {
    return Object.keys(this.costProviderCategoryMap).map((key) => {
      return {
        id: key,
        ...this.costProviderCategoryMap[key],
      };
    });
  }
}

results matching ""

    No results matching ""