func FetchBlobSize()

in azkustoingest/internal/utils/ingestion_utils.go [24:80]


func FetchBlobSize(fPath string, ctx context.Context, client *http.Client) (size int64, err error) {
	if !strings.Contains(fPath, ".blob.") || strings.Contains(strings.ToLower(fPath), "managed_identity=") || strings.Contains(strings.ToLower(fPath), "token=") {
		return 0, nil
	}

	parsed, err := resources.Parse(fPath)
	if err != nil {
		return 0, err
	}

	var blobClient *azblob.Client = nil
	var objectNameSplit []string

	if len(parsed.SAS()) == 0 {
		objectParts := strings.Split(parsed.ObjectName(), ";")
		if len(objectParts) == 2 {
			cred, err := service.NewSharedKeyCredential(parsed.Account(), objectParts[1])
			if err != nil {
				return 0, err
			}

			serviceUrl := fmt.Sprintf("%s://%s", parsed.URL().Scheme, parsed.URL().Host)
			blobClient, err = azblob.NewClientWithSharedKeyCredential(serviceUrl, cred, &azblob.ClientOptions{
				ClientOptions: azcore.ClientOptions{
					Transport: client,
				},
			})
			if err != nil {
				return 0, err
			}

			objectNameSplit = strings.SplitN(objectParts[0], "/", 2)
		}
	}

	if blobClient == nil {
		serviceUrl := fmt.Sprintf("%s://%s?%s", parsed.URL().Scheme, parsed.URL().Host, parsed.SAS().Encode())
		blobClient, err = azblob.NewClientWithNoCredential(serviceUrl, &azblob.ClientOptions{
			ClientOptions: azcore.ClientOptions{
				Transport: client,
			},
		})
		if err != nil {
			return 0, err
		}

		objectNameSplit = strings.SplitN(parsed.ObjectName(), "/", 2)
	}

	blobCli := blobClient.ServiceClient().NewContainerClient(objectNameSplit[0]).NewBlobClient(objectNameSplit[1])
	properties, err := blobCli.GetProperties(ctx, &blob.GetPropertiesOptions{})
	if err != nil {
		return 0, err
	}

	return *properties.ContentLength, nil
}