export function fromServiceDataFeedDetailUnion()

in sdk/metricsadvisor/ai-metrics-advisor/src/transforms.ts [874:1192]


export function fromServiceDataFeedDetailUnion(
  original: ServiceDataFeedDetailUnion,
): MetricsAdvisorDataFeed {
  const metricMap: Record<string, string> = {};
  for (const metric of original.metrics) {
    metricMap[metric.name] = metric.id!;
  }

  const common = {
    id: original.dataFeedId!,
    name: original.dataFeedName,
    metricIds: metricMap,
    createdOn: original.createdTime!,
    status: original.status!,
    isAdmin: original.isAdmin!,
    creator: original.creator!,
    schema: {
      metrics: original.metrics,
      dimensions: original.dimension,
      timestampColumn: original.timestampColumn,
    },
    granularity: fromServiceGranularity(original.granularityName, original.granularityAmount),
    ingestionSettings: {
      ingestionStartTime: original.dataStartFrom,
      ingestionStartOffsetInSeconds: original.startOffsetInSeconds,
      dataSourceRequestConcurrency: original.maxConcurrency,
      ingestionRetryDelayInSeconds: original.minRetryIntervalInSeconds,
      stopRetryAfterInSeconds: original.stopRetryAfterInSeconds,
    },
    description: original.dataFeedDescription,
    actionLinkTemplate: original.actionLinkTemplate,
    rollupSettings: toRollupSettings(original),
    missingDataPointFillSettings:
      original.fillMissingPointType === "CustomValue"
        ? {
            fillType: original.fillMissingPointType!,
            customFillValue: original.fillMissingPointValue!,
          }
        : {
            fillType: original.fillMissingPointType!,
          },
    accessMode: original.viewMode,
    admins: original.admins,
    viewers: original.viewers,
  };
  switch (original.dataSourceType) {
    case "AzureApplicationInsights": {
      const orig = original as ServiceAzureApplicationInsightsDataFeed;
      const result1: MetricsAdvisorDataFeed = {
        ...common,
        source: {
          dataSourceType: "AzureApplicationInsights",
          azureCloud: orig.dataSourceParameter.azureCloud!,
          applicationId: orig.dataSourceParameter.applicationId!,
          apiKey: orig.dataSourceParameter.apiKey,
          query: orig.dataSourceParameter.query,
          authenticationType: "Basic",
        },
      };
      return result1;
    }
    case "AzureBlob": {
      const orig2 = original as ServiceAzureBlobDataFeed;
      let auth: { authenticationType: "Basic" } | { authenticationType: "ManagedIdentity" };
      if (!original.authenticationType) {
        auth = { authenticationType: "Basic" };
      } else if (
        original.authenticationType === "Basic" ||
        original.authenticationType === "ManagedIdentity"
      ) {
        auth = { authenticationType: original.authenticationType };
      } else {
        throw new Error(`Unexpected authentication type: '${original.authenticationType}'`);
      }
      const source: AzureBlobDataFeedSource = {
        dataSourceType: "AzureBlob",
        blobTemplate: orig2.dataSourceParameter.blobTemplate,
        connectionString: orig2.dataSourceParameter.connectionString!,
        container: orig2.dataSourceParameter.container,
        ...auth,
      };
      const result2: MetricsAdvisorDataFeed = {
        ...common,
        source,
      };
      return result2;
    }
    case "AzureCosmosDB": {
      const orig3 = original as ServiceAzureCosmosDBDataFeed;
      const result3: MetricsAdvisorDataFeed = {
        ...common,
        source: {
          dataSourceType: "AzureCosmosDB",
          authenticationType: "Basic",
          ...orig3.dataSourceParameter,
        },
      };
      return result3;
    }
    case "AzureDataExplorer": {
      const orig4 = original as ServiceAzureDataExplorerDataFeed;
      let auth: AzureDataExplorerAuthTypes;
      if (!original.authenticationType) {
        auth = { authenticationType: "Basic" };
      } else if (
        original.authenticationType === "Basic" ||
        original.authenticationType === "ManagedIdentity"
      ) {
        auth = { authenticationType: original.authenticationType };
      } else if (
        original.authenticationType === "ServicePrincipal" ||
        original.authenticationType === "ServicePrincipalInKV"
      ) {
        auth = {
          authenticationType: original.authenticationType,
          credentialId: original.credentialId!,
        };
      } else {
        throw new Error(`Unexpected authentication type: '${original.authenticationType}'`);
      }
      const source: AzureDataExplorerDataFeedSource = {
        dataSourceType: "AzureDataExplorer",
        connectionString: orig4.dataSourceParameter.connectionString!,
        query: orig4.dataSourceParameter.query,
        ...auth,
      };
      const result4: MetricsAdvisorDataFeed = {
        ...common,
        source,
      };
      return result4;
    }
    case "AzureDataLakeStorageGen2": {
      const orig5 = original as ServiceAzureDataLakeStorageGen2DataFeed;
      let auth: AzureDataLakeStorageGen2AuthTypes;
      if (!original.authenticationType || original.authenticationType === "Basic") {
        auth = { authenticationType: "Basic", accountKey: orig5.dataSourceParameter.accountKey! };
      } else if (original.authenticationType === "ManagedIdentity") {
        auth = { authenticationType: original.authenticationType };
      } else if (
        original.authenticationType === "ServicePrincipal" ||
        original.authenticationType === "ServicePrincipalInKV" ||
        original.authenticationType === "DataLakeGen2SharedKey"
      ) {
        auth = {
          authenticationType: original.authenticationType,
          credentialId: original.credentialId!,
        };
      } else {
        throw new Error(`Unexpected authentication type: '${original.authenticationType}'`);
      }
      const source: AzureDataLakeStorageGen2DataFeedSource = {
        dataSourceType: "AzureDataLakeStorageGen2",
        accountName: orig5.dataSourceParameter.accountName!,
        directoryTemplate: orig5.dataSourceParameter.directoryTemplate,
        fileSystemName: orig5.dataSourceParameter.fileSystemName,
        fileTemplate: orig5.dataSourceParameter.fileTemplate,
        ...auth,
      };
      const result5: MetricsAdvisorDataFeed = {
        ...common,
        source,
      };
      return result5;
    }
    case "AzureTable": {
      const orig6 = original as ServiceAzureTableDataFeed;
      const result6: MetricsAdvisorDataFeed = {
        ...common,
        source: {
          dataSourceType: "AzureTable",
          connectionString: orig6.dataSourceParameter.connectionString!,
          table: orig6.dataSourceParameter.table,
          query: orig6.dataSourceParameter.query,
          authenticationType: "Basic",
        },
      };
      return result6;
    }
    case "InfluxDB": {
      const orig8 = original as ServiceInfluxDBDataFeed;
      const result8: MetricsAdvisorDataFeed = {
        ...common,
        source: {
          dataSourceType: "InfluxDB",
          connectionString: orig8.dataSourceParameter.connectionString!,
          database: orig8.dataSourceParameter.database!,
          password: orig8.dataSourceParameter.password!,
          query: orig8.dataSourceParameter.query,
          userName: orig8.dataSourceParameter.userName!,
          authenticationType: "Basic",
        },
      };
      return result8;
    }
    case "MongoDB": {
      const orig9 = original as ServiceMongoDBDataFeed;
      const result9: MetricsAdvisorDataFeed = {
        ...common,
        source: {
          dataSourceType: "MongoDB",
          connectionString: orig9.dataSourceParameter.connectionString!,
          database: orig9.dataSourceParameter.database!,
          command: orig9.dataSourceParameter.command,
          authenticationType: "Basic",
        },
      };
      return result9;
    }
    case "MySql": {
      const orig10 = original as ServiceMySqlDataFeed;
      const result10: MetricsAdvisorDataFeed = {
        ...common,
        source: {
          dataSourceType: "MySql",
          connectionString: orig10.dataSourceParameter.connectionString,
          query: orig10.dataSourceParameter.query,
          authenticationType: "Basic",
        },
      };
      return result10;
    }
    case "PostgreSql": {
      const orig11 = original as ServicePostgreSqlDataFeed;
      const result11: MetricsAdvisorDataFeed = {
        ...common,
        source: {
          dataSourceType: "PostgreSql",
          connectionString: orig11.dataSourceParameter.connectionString,
          query: orig11.dataSourceParameter.query,
          authenticationType: "Basic",
        },
      };
      return result11;
    }
    case "SqlServer": {
      const orig12 = original as ServiceSQLServerDataFeed;
      let auth: SqlServerAuthTypes;
      if (!original.authenticationType) {
        auth = {
          authenticationType: "Basic",
          connectionString: orig12.dataSourceParameter.connectionString!,
        };
      }
      if (
        original.authenticationType === "Basic" ||
        original.authenticationType === "ManagedIdentity"
      ) {
        auth = {
          authenticationType: original.authenticationType,
          connectionString: orig12.dataSourceParameter.connectionString!,
        };
      } else if (
        original.authenticationType === "ServicePrincipal" ||
        original.authenticationType === "ServicePrincipalInKV"
      ) {
        auth = {
          authenticationType: original.authenticationType,
          credentialId: orig12.credentialId!,
          connectionString: orig12.dataSourceParameter.connectionString!,
        };
      } else if (original.authenticationType === "AzureSQLConnectionString") {
        auth = {
          authenticationType: original.authenticationType,
          credentialId: original.credentialId!,
        };
      } else {
        throw new Error(`Unexpected authentication type: '${original.authenticationType}'`);
      }
      const result12: MetricsAdvisorDataFeed = {
        ...common,
        source: {
          dataSourceType: "SqlServer",
          query: orig12.dataSourceParameter.query,
          ...auth,
        },
      };
      return result12;
    }
    case "AzureEventHubs": {
      const orig13 = original as ServiceAzureEventHubsDataFeed;
      const result13: MetricsAdvisorDataFeed = {
        ...common,
        source: {
          dataSourceType: "AzureEventHubs",
          connectionString: orig13.dataSourceParameter.connectionString,
          consumerGroup: orig13.dataSourceParameter.consumerGroup,
          authenticationType: "Basic",
        },
      };
      return result13;
    }
    case "AzureLogAnalytics": {
      const orig14 = original as ServiceAzureLogAnalyticsDataFeed;
      const result14: MetricsAdvisorDataFeed = {
        ...common,
        source: {
          dataSourceType: "AzureLogAnalytics",
          clientId: orig14.dataSourceParameter.clientId!,
          clientSecret: orig14.dataSourceParameter.clientSecret,
          tenantId: orig14.dataSourceParameter.tenantId!,
          query: orig14.dataSourceParameter.query,
          workspaceId: orig14.dataSourceParameter.workspaceId,
          authenticationType: "Basic",
        },
      };
      return result14;
    }
    default:
      return {
        ...common,
        source: {
          dataSourceType: "Unknown",
          dataSourceParameter: (original as any).dataSourceParameter,
          authenticationType: "Basic",
        },
      };
  }
}