packages/azure-kusto-ingest/src/ingestionBlobInfo.ts (80 lines of code) (raw):
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
import { v4 as uuidv4 } from "uuid";
import { BlobDescriptor } from "./descriptors.js";
import IngestionProperties, { ReportLevel, ReportMethod } from "./ingestionProperties.js";
import { IngestionStatusInTableDescription } from "./ingestionResult.js";
export class IngestionBlobInfo {
BlobPath: string;
RawDataSize: number | null;
DatabaseName: string | null;
TableName: string | null;
RetainBlobOnSuccess: boolean;
FlushImmediately: boolean;
IgnoreSizeLimit: boolean;
ReportLevel: ReportLevel | null;
ReportMethod: ReportMethod | null;
SourceMessageCreationTime: Date;
Id: string;
AdditionalProperties: { [additional: string]: any };
IngestionStatusInTable: IngestionStatusInTableDescription | null = null;
ApplicationForTracing?: string | null = null;
ClientVersionForTracing?: string | null = null;
constructor(
blobDescriptor: BlobDescriptor,
ingestionProperties: IngestionProperties,
authContext: string | null = null,
applicationForTracing: string | null = null,
clientVersionForTracing: string | null = null,
) {
this.BlobPath = blobDescriptor.path;
this.RawDataSize = blobDescriptor.size;
this.DatabaseName = ingestionProperties.database ?? null;
this.TableName = ingestionProperties.table ?? null;
this.RetainBlobOnSuccess = true;
this.FlushImmediately = ingestionProperties.flushImmediately ?? false;
this.IgnoreSizeLimit = false;
this.ReportLevel = ingestionProperties.reportLevel ?? null;
this.ReportMethod = ingestionProperties.reportMethod ?? null;
this.SourceMessageCreationTime = new Date();
this.Id = blobDescriptor.sourceId || uuidv4();
this.ApplicationForTracing = applicationForTracing;
this.ClientVersionForTracing = clientVersionForTracing;
const additionalProperties = ingestionProperties.additionalProperties || {};
additionalProperties.authorizationContext = authContext;
const tags: string[] = [];
if (ingestionProperties.additionalTags) {
tags.push(...ingestionProperties.additionalTags);
}
if (ingestionProperties.dropByTags) {
tags.push(...ingestionProperties.dropByTags.map((t) => "drop-by:" + t));
}
if (ingestionProperties.ingestByTags) {
tags.push(...ingestionProperties.ingestByTags.map((t) => "ingest-by:" + t));
}
if (tags.length > 0) {
additionalProperties.tags = JSON.stringify(tags);
}
if (ingestionProperties.ingestIfNotExists) {
additionalProperties.ingestIfNotExists = ingestionProperties.ingestIfNotExists;
}
if (ingestionProperties.ingestionMappingColumns && ingestionProperties.ingestionMappingColumns.length > 0) {
// server expects a string
additionalProperties.ingestionMapping = JSON.stringify(ingestionProperties.ingestionMappingColumns.map((m) => m.toApiMapping()));
}
if (ingestionProperties.ingestionMappingReference) {
additionalProperties.ingestionMappingReference = ingestionProperties.ingestionMappingReference;
}
if (ingestionProperties.ingestionMappingKind) {
additionalProperties.ingestionMappingType = ingestionProperties.ingestionMappingKind;
}
if (ingestionProperties.validationPolicy) {
additionalProperties.ValidationPolicy = ingestionProperties.validationPolicy;
}
if (ingestionProperties.format) {
additionalProperties.format = ingestionProperties.format;
}
if (ingestionProperties.ignoreFirstRecord) {
additionalProperties.ignoreFirstRecord = ingestionProperties.ignoreFirstRecord;
}
this.AdditionalProperties = additionalProperties;
}
}
export default IngestionBlobInfo;