Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
136 changes: 136 additions & 0 deletions DirectConnector/AzureQueuesFunctions.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,136 @@
//------------------------------------------------------------
// Copyright (c) Microsoft Corporation. All rights reserved.
//------------------------------------------------------------

using System.Net;
using Azure.Connectors.Sdk;
using Azure.Connectors.Sdk.Azurequeues;

Check failure on line 7 in DirectConnector/AzureQueuesFunctions.cs

View workflow job for this annotation

GitHub Actions / build (ubuntu-latest)

The type or namespace name 'Azurequeues' does not exist in the namespace 'Azure.Connectors.Sdk' (are you missing an assembly reference?)
using Microsoft.Azure.Functions.Worker;
using Microsoft.Azure.Functions.Worker.Http;
using Microsoft.Extensions.Logging;

namespace DirectConnector;

/// <summary>
/// Azure Functions demonstrating Azure Queues operations using the generated
/// <see cref="AzurequeuesClient"/> from the Azure Connectors SDK.
/// </summary>
public class AzureQueuesFunctions
{
private readonly ILogger<AzureQueuesFunctions> _logger;
private readonly AzurequeuesClient _azureQueuesClient;

public AzureQueuesFunctions(
ILogger<AzureQueuesFunctions> logger,
AzurequeuesClient azureQueuesClient)
{
this._logger = logger;
this._azureQueuesClient = azureQueuesClient;
}

/// <summary>
/// Gets the list of Azure Storage accounts accessible via the connection.
/// </summary>
[Function("AzureQueuesGetStorageAccounts")]
public async Task<HttpResponseData> AzureQueuesGetStorageAccountsAsync(
[HttpTrigger(AuthorizationLevel.Function, "get", Route = "azurequeues/accounts")] HttpRequestData request,
CancellationToken cancellationToken)
{
this._logger.LogInformation("AzureQueuesGetStorageAccounts: Using generated AzurequeuesClient from SDK.");

try
{
var accounts = await this._azureQueuesClient
.GetStorageAccountsAsync(cancellationToken: cancellationToken)
.ConfigureAwait(continueOnCapturedContext: false);

var response = request.CreateResponse(HttpStatusCode.OK);
await response
.WriteAsJsonAsync(new { success = true, accounts }, cancellationToken)
.ConfigureAwait(continueOnCapturedContext: false);

return response;
}
catch (ConnectorException ex)
{
this._logger.LogError(ex, "AzureQueuesGetStorageAccounts failed with status '{StatusCode}'.", ex.Status);

var errorResponse = request.CreateResponse(HttpStatusCode.BadGateway);
await errorResponse
.WriteAsJsonAsync(new { success = false, error = ex.Message, statusCode = ex.Status, details = ex.ResponseBody }, cancellationToken)
.ConfigureAwait(continueOnCapturedContext: false);

return errorResponse;
}
catch (Exception ex) when (!ex.IsFatal())
{
this._logger.LogError(ex, "Error in AzureQueuesGetStorageAccounts.");

var errorResponse = request.CreateResponse(HttpStatusCode.InternalServerError);
await errorResponse
.WriteAsJsonAsync(new { success = false, error = ex.Message })
.ConfigureAwait(continueOnCapturedContext: false);

return errorResponse;
}
}

/// <summary>
/// Lists queues in the specified Azure Storage account.
/// Route: GET /azurequeues/queues?storageAccount={storageAccountNameOrQueueEndpoint}
/// </summary>
[Function("AzureQueuesListQueues")]
public async Task<HttpResponseData> AzureQueuesListQueuesAsync(
[HttpTrigger(AuthorizationLevel.Function, "get", Route = "azurequeues/queues")] HttpRequestData request,
CancellationToken cancellationToken)
{
this._logger.LogInformation("AzureQueuesListQueues: Using generated AzurequeuesClient from SDK.");

var storageAccount = System.Web.HttpUtility.ParseQueryString(request.Url.Query)["storageAccount"];
if (string.IsNullOrWhiteSpace(storageAccount))
{
var badRequest = request.CreateResponse(HttpStatusCode.BadRequest);
await badRequest
.WriteAsJsonAsync(new { success = false, error = "Missing required query parameter 'storageAccount'." }, cancellationToken)
.ConfigureAwait(continueOnCapturedContext: false);

return badRequest;
}

try
{
var queues = await this._azureQueuesClient
.ListQueuesAsync(storageAccountNameOrQueueEndpoint: storageAccount, cancellationToken: cancellationToken)
.ConfigureAwait(continueOnCapturedContext: false);

var response = request.CreateResponse(HttpStatusCode.OK);
await response
.WriteAsJsonAsync(new { success = true, queues }, cancellationToken)
.ConfigureAwait(continueOnCapturedContext: false);

return response;
}
catch (ConnectorException ex)
{
this._logger.LogError(ex, "AzureQueuesListQueues failed with status '{StatusCode}'.", ex.Status);

var errorResponse = request.CreateResponse(HttpStatusCode.BadGateway);
await errorResponse
.WriteAsJsonAsync(new { success = false, error = ex.Message, statusCode = ex.Status, details = ex.ResponseBody }, cancellationToken)
.ConfigureAwait(continueOnCapturedContext: false);

return errorResponse;
}
catch (Exception ex) when (!ex.IsFatal())
{
this._logger.LogError(ex, "Error in AzureQueuesListQueues.");

var errorResponse = request.CreateResponse(HttpStatusCode.InternalServerError);
await errorResponse
.WriteAsJsonAsync(new { success = false, error = ex.Message })
.ConfigureAwait(continueOnCapturedContext: false);

return errorResponse;
}
}
}
136 changes: 136 additions & 0 deletions DirectConnector/AzureTablesFunctions.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,136 @@
//------------------------------------------------------------
// Copyright (c) Microsoft Corporation. All rights reserved.
//------------------------------------------------------------

using System.Net;
using Azure.Connectors.Sdk;
using Azure.Connectors.Sdk.Azuretables;

Check failure on line 7 in DirectConnector/AzureTablesFunctions.cs

View workflow job for this annotation

GitHub Actions / build (ubuntu-latest)

The type or namespace name 'Azuretables' does not exist in the namespace 'Azure.Connectors.Sdk' (are you missing an assembly reference?)
using Microsoft.Azure.Functions.Worker;
using Microsoft.Azure.Functions.Worker.Http;
using Microsoft.Extensions.Logging;

namespace DirectConnector;

/// <summary>
/// Azure Functions demonstrating Azure Tables operations using the generated
/// <see cref="AzuretablesClient"/> from the Azure Connectors SDK.
/// </summary>
public class AzureTablesFunctions
{
private readonly ILogger<AzureTablesFunctions> _logger;
private readonly AzuretablesClient _azureTablesClient;

public AzureTablesFunctions(
ILogger<AzureTablesFunctions> logger,
AzuretablesClient azureTablesClient)
{
this._logger = logger;
this._azureTablesClient = azureTablesClient;
}

/// <summary>
/// Gets the list of Azure Storage accounts accessible via the connection.
/// </summary>
[Function("AzureTablesGetStorageAccounts")]
public async Task<HttpResponseData> AzureTablesGetStorageAccountsAsync(
[HttpTrigger(AuthorizationLevel.Function, "get", Route = "azuretables/accounts")] HttpRequestData request,
CancellationToken cancellationToken)
{
this._logger.LogInformation("AzureTablesGetStorageAccounts: Using generated AzuretablesClient from SDK.");

try
{
var accounts = await this._azureTablesClient
.GetStorageAccountsAsync(cancellationToken: cancellationToken)
.ConfigureAwait(continueOnCapturedContext: false);

var response = request.CreateResponse(HttpStatusCode.OK);
await response
.WriteAsJsonAsync(new { success = true, accounts }, cancellationToken)
.ConfigureAwait(continueOnCapturedContext: false);

return response;
}
catch (ConnectorException ex)
{
this._logger.LogError(ex, "AzureTablesGetStorageAccounts failed with status '{StatusCode}'.", ex.Status);

var errorResponse = request.CreateResponse(HttpStatusCode.BadGateway);
await errorResponse
.WriteAsJsonAsync(new { success = false, error = ex.Message, statusCode = ex.Status, details = ex.ResponseBody }, cancellationToken)
.ConfigureAwait(continueOnCapturedContext: false);

return errorResponse;
}
catch (Exception ex) when (!ex.IsFatal())
{
this._logger.LogError(ex, "Error in AzureTablesGetStorageAccounts.");

var errorResponse = request.CreateResponse(HttpStatusCode.InternalServerError);
await errorResponse
.WriteAsJsonAsync(new { success = false, error = ex.Message })
.ConfigureAwait(continueOnCapturedContext: false);

return errorResponse;
}
}

/// <summary>
/// Lists tables in the specified Azure Storage account.
/// Route: GET /azuretables/tables?storageAccount={storageAccountNameOrTableEndpoint}
/// </summary>
[Function("AzureTablesGetTables")]
public async Task<HttpResponseData> AzureTablesGetTablesAsync(
[HttpTrigger(AuthorizationLevel.Function, "get", Route = "azuretables/tables")] HttpRequestData request,
CancellationToken cancellationToken)
{
this._logger.LogInformation("AzureTablesGetTables: Using generated AzuretablesClient from SDK.");

var storageAccount = System.Web.HttpUtility.ParseQueryString(request.Url.Query)["storageAccount"];
if (string.IsNullOrWhiteSpace(storageAccount))
{
var badRequest = request.CreateResponse(HttpStatusCode.BadRequest);
await badRequest
.WriteAsJsonAsync(new { success = false, error = "Missing required query parameter 'storageAccount'." }, cancellationToken)
.ConfigureAwait(continueOnCapturedContext: false);

return badRequest;
}

try
{
var tables = await this._azureTablesClient
.GetTablesAsync(storageAccountNameOrTableEndpoint: storageAccount, cancellationToken: cancellationToken)
.ConfigureAwait(continueOnCapturedContext: false);

var response = request.CreateResponse(HttpStatusCode.OK);
await response
.WriteAsJsonAsync(new { success = true, tables }, cancellationToken)
.ConfigureAwait(continueOnCapturedContext: false);

return response;
}
catch (ConnectorException ex)
{
this._logger.LogError(ex, "AzureTablesGetTables failed with status '{StatusCode}'.", ex.Status);

var errorResponse = request.CreateResponse(HttpStatusCode.BadGateway);
await errorResponse
.WriteAsJsonAsync(new { success = false, error = ex.Message, statusCode = ex.Status, details = ex.ResponseBody }, cancellationToken)
.ConfigureAwait(continueOnCapturedContext: false);

return errorResponse;
}
catch (Exception ex) when (!ex.IsFatal())
{
this._logger.LogError(ex, "Error in AzureTablesGetTables.");

var errorResponse = request.CreateResponse(HttpStatusCode.InternalServerError);
await errorResponse
.WriteAsJsonAsync(new { success = false, error = ex.Message })
.ConfigureAwait(continueOnCapturedContext: false);

return errorResponse;
}
}
}
Loading
Loading