Add User Agent
This commit is contained in:
parent
011ddc1623
commit
fdcca0655c
|
|
@ -1,7 +1,6 @@
|
|||
using Microsoft.Extensions.Configuration;
|
||||
using Google.Apis.Auth.OAuth2;
|
||||
using Google.Apis.Auth.OAuth2;
|
||||
using Google.Cloud.BigQuery.V2;
|
||||
using System.Linq.Expressions;
|
||||
using Google.Apis.Http;
|
||||
|
||||
namespace OSAFeedXML
|
||||
{
|
||||
|
|
@ -38,22 +37,13 @@ namespace OSAFeedXML
|
|||
private readonly string DomainRedirect;
|
||||
private readonly string GoogleProjectId, GoogleDatabase;
|
||||
|
||||
public GoogleBigQuery()
|
||||
public GoogleBigQuery(BigQueryClient bigQueryClient)
|
||||
{
|
||||
string googleCredentialsJson = Environment.GetEnvironmentVariable("GOOGLE_CREDENTIALS_JSON") ?? throw new Exception("Brak danych uwierzytelniających Google.");
|
||||
|
||||
if (string.IsNullOrEmpty(googleCredentialsJson))
|
||||
{
|
||||
throw new InvalidOperationException("Brak danych uwierzytelniających Google.");
|
||||
}
|
||||
|
||||
GoogleCredential googleCredential = GoogleCredential.FromJson(googleCredentialsJson);
|
||||
|
||||
GoogleProjectId = Environment.GetEnvironmentVariable("GOOGLE_PROJECT_ID") ?? throw new Exception("Brak identyfikatora projektu Google.");
|
||||
GoogleDatabase = Environment.GetEnvironmentVariable("GOOGLE_DATABASE") ?? throw new Exception("Brak nazwy bazy danych Google.");
|
||||
|
||||
bigqueryClient = BigQueryClient.Create(GoogleProjectId, googleCredential);
|
||||
DomainRedirect = Environment.GetEnvironmentVariable("DOMAIN_REDIRECT") ?? throw new Exception("Brak domeny przekierowania.");
|
||||
|
||||
this.bigqueryClient = bigQueryClient;
|
||||
}
|
||||
|
||||
public dynamic GetDataBigQuery(List<Destinations> Destinations, bool WithoutBg = false)
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
using Microsoft.Azure.Functions.Worker;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using Microsoft.Extensions.Hosting;
|
||||
using Migration.Services;
|
||||
using OSAFeedXML;
|
||||
|
||||
var host = new HostBuilder()
|
||||
|
|
@ -10,6 +11,13 @@ var host = new HostBuilder()
|
|||
services.AddApplicationInsightsTelemetryWorkerService();
|
||||
services.ConfigureFunctionsApplicationInsights();
|
||||
services.AddSingleton<IBigQuery, GoogleBigQuery>();
|
||||
|
||||
services.AddSingleton<IGoogleBigQueryClientFactory, GoogleBigQueryClientFactory>();
|
||||
services.AddSingleton(sp =>
|
||||
{
|
||||
var factory = sp.GetRequiredService<IGoogleBigQueryClientFactory>();
|
||||
return factory.CreateClient();
|
||||
});
|
||||
})
|
||||
.Build();
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,8 @@
|
|||
using Google.Cloud.BigQuery.V2;
|
||||
|
||||
namespace Migration.Services;
|
||||
public interface IGoogleBigQueryClientFactory
|
||||
{
|
||||
BigQueryClient CreateClient();
|
||||
BigQueryTable GetTable(string datasetId, string tableId);
|
||||
}
|
||||
|
|
@ -0,0 +1,60 @@
|
|||
using Google.Apis.Auth.OAuth2;
|
||||
using Google.Apis.Http;
|
||||
using Google.Cloud.BigQuery.V2;
|
||||
using System.Net.Http.Headers;
|
||||
|
||||
namespace Migration.Services;
|
||||
|
||||
public class CustomHttpClientFactory : HttpClientFactory
|
||||
{
|
||||
private readonly string userAgent;
|
||||
|
||||
public CustomHttpClientFactory(string userAgent)
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(userAgent))
|
||||
{
|
||||
throw new ArgumentException("User-Agent cannot be null or empty", nameof(userAgent));
|
||||
}
|
||||
this.userAgent = userAgent;
|
||||
}
|
||||
|
||||
public new ConfigurableHttpClient CreateHttpClient(CreateHttpClientArgs args)
|
||||
{
|
||||
var httpClient = base.CreateHttpClient(args);
|
||||
httpClient.DefaultRequestHeaders.UserAgent.Clear();
|
||||
httpClient.DefaultRequestHeaders.UserAgent.Add(new ProductInfoHeaderValue(userAgent, "1.0"));
|
||||
return httpClient;
|
||||
}
|
||||
}
|
||||
|
||||
public class GoogleBigQueryClientFactory : IGoogleBigQueryClientFactory
|
||||
{
|
||||
private readonly Lazy<BigQueryClient> bigqueryClient;
|
||||
|
||||
public GoogleBigQueryClientFactory()
|
||||
{
|
||||
bigqueryClient = new Lazy<BigQueryClient>(CreateClient);
|
||||
}
|
||||
|
||||
public BigQueryClient CreateClient()
|
||||
{
|
||||
var projectId = Environment.GetEnvironmentVariable("GOOGLE_PROJECT_ID") ?? throw new Exception("Brak identyfikatora projektu Google.");
|
||||
var userAgent = Environment.GetEnvironmentVariable("USER_AGENT") ?? throw new Exception("Nie podano UserAgent.");
|
||||
var credentialFile = Environment.GetEnvironmentVariable("GOOGLE_CREDENTIALS_JSON") ?? throw new Exception("Nie podano ścieżki do pliku GoogleCredentials.");
|
||||
|
||||
var credential = GoogleCredential.FromJson(credentialFile);
|
||||
var httpClientFactory = new CustomHttpClientFactory(userAgent);
|
||||
|
||||
return new BigQueryClientBuilder
|
||||
{
|
||||
ProjectId = projectId,
|
||||
Credential = credential,
|
||||
HttpClientFactory = httpClientFactory
|
||||
}.Build();
|
||||
}
|
||||
|
||||
public BigQueryTable GetTable(string datasetId, string tableId)
|
||||
{
|
||||
return bigqueryClient.Value.GetTable(datasetId, tableId);
|
||||
}
|
||||
}
|
||||
|
|
@ -1,5 +1,4 @@
|
|||
using System.Text.RegularExpressions;
|
||||
using Google.Apis.Auth.OAuth2;
|
||||
using Google.Cloud.BigQuery.V2;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using Migration.Services;
|
||||
|
|
@ -15,18 +14,14 @@ public interface IBigQuery
|
|||
|
||||
public class GoogleBigQuery : IBigQuery
|
||||
{
|
||||
private readonly GoogleCredential googleCredential;
|
||||
private readonly BigQueryClient bigqueryClient;
|
||||
private readonly string GoogleProjectId, GoogleDatabase;
|
||||
private readonly string GoogleDatabase;
|
||||
private readonly IHttpClientFactory httpClientFactory;
|
||||
|
||||
public GoogleBigQuery(IConfiguration configuration, IHttpClientFactory httpClientFactory)
|
||||
public GoogleBigQuery(IConfiguration configuration, IHttpClientFactory httpClientFactory, BigQueryClient bigQueryClient)
|
||||
{
|
||||
GoogleProjectId = configuration.GetValue<string>("BigQuery:ProjectId") ?? throw new Exception("Nie podano parametru identyfikatora projektu Google.");
|
||||
this.bigqueryClient = bigQueryClient;
|
||||
GoogleDatabase = configuration.GetValue<string>("BigQuery:DbName") ?? throw new Exception("Nie podano parametru nazwy bazy danych BigQuery w konfiguracji");
|
||||
|
||||
googleCredential = GoogleCredential.FromFile(configuration.GetValue<string>("GoogleCredentialFile"));
|
||||
bigqueryClient = BigQueryClient.Create(GoogleProjectId, googleCredential);
|
||||
this.httpClientFactory = httpClientFactory;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -11,6 +11,14 @@ builder.Services.Configure<MainSettings>(builder.Configuration.GetSection(MainSe
|
|||
builder.Services.AddSingleton<IDataverseProvider, DataverseProvider>();
|
||||
builder.Services.AddHttpClient(DataverseProvider.HTTP_CLIENT, DataverseProvider.Setup);
|
||||
|
||||
builder.Services.AddSingleton<IGoogleBigQueryClientFactory, GoogleBigQueryClientFactory>();
|
||||
builder.Services.AddSingleton(sp =>
|
||||
{
|
||||
var factory = sp.GetRequiredService<IGoogleBigQueryClientFactory>();
|
||||
var configuration = sp.GetRequiredService<IConfiguration>();
|
||||
return factory.CreateClient(configuration);
|
||||
});
|
||||
|
||||
var app = builder.Build();
|
||||
|
||||
if (app.Environment.IsDevelopment())
|
||||
|
|
|
|||
|
|
@ -1,10 +1,8 @@
|
|||
using Migration.Settings;
|
||||
|
||||
namespace Migration.Services
|
||||
namespace Migration.Services;
|
||||
public interface IDataverseProvider
|
||||
{
|
||||
public interface IDataverseProvider
|
||||
{
|
||||
Uri Url { get; }
|
||||
string Token { get; }
|
||||
}
|
||||
Uri Url { get; }
|
||||
string Token { get; }
|
||||
}
|
||||
|
|
@ -0,0 +1,8 @@
|
|||
using Google.Cloud.BigQuery.V2;
|
||||
|
||||
namespace Migration.Services;
|
||||
public interface IGoogleBigQueryClientFactory
|
||||
{
|
||||
BigQueryClient CreateClient(IConfiguration configuration);
|
||||
BigQueryTable GetTable(string datasetId, string tableId);
|
||||
}
|
||||
|
|
@ -2,27 +2,21 @@
|
|||
using System.Net.Mime;
|
||||
using Migration.Settings;
|
||||
using Microsoft.Extensions.Options;
|
||||
using Newtonsoft.Json;
|
||||
using Newtonsoft.Json.Serialization;
|
||||
|
||||
namespace Migration.Services;
|
||||
|
||||
public class DataverseProvider : IDataverseProvider
|
||||
{
|
||||
public const string HTTP_CLIENT = "FeedDataverseBQ";
|
||||
|
||||
private static readonly ProductInfoHeaderValue USER_AGENT = ProductInfoHeaderValue.Parse("FeedDataverseBQ");
|
||||
private static readonly MediaTypeWithQualityHeaderValue JSON_MEDIA_TYPE = new MediaTypeWithQualityHeaderValue(MediaTypeNames.Application.Json);
|
||||
public Uri Url { get; init; }
|
||||
public string Token { get; init; }
|
||||
|
||||
public DataverseProvider(IOptions<MainSettings> mainSettingsOptions, IHttpClientFactory httpClientFactory)
|
||||
{
|
||||
var DataverseSettings = mainSettingsOptions.Value;
|
||||
Url = new Uri(DataverseSettings.Url);
|
||||
Token = DataverseSettings.Token;
|
||||
}
|
||||
|
||||
public static void Setup(IServiceProvider serviceProvider, HttpClient httpClient)
|
||||
{
|
||||
var dataverseConnectionsProvider = serviceProvider.GetRequiredService<IDataverseProvider>();
|
||||
|
|
@ -39,7 +33,6 @@ public class DataverseDelegatingHandler : DelegatingHandler
|
|||
{
|
||||
return SendAsync(request, cancellationToken).GetAwaiter().GetResult();
|
||||
}
|
||||
|
||||
protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
|
||||
{
|
||||
return await base.SendAsync(request, cancellationToken);
|
||||
|
|
|
|||
|
|
@ -0,0 +1,60 @@
|
|||
using Google.Apis.Auth.OAuth2;
|
||||
using Google.Apis.Http;
|
||||
using Google.Cloud.BigQuery.V2;
|
||||
using System.Net.Http.Headers;
|
||||
|
||||
namespace Migration.Services;
|
||||
|
||||
public class CustomHttpClientFactory : HttpClientFactory
|
||||
{
|
||||
private readonly string userAgent;
|
||||
|
||||
public CustomHttpClientFactory(string userAgent)
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(userAgent))
|
||||
{
|
||||
throw new ArgumentException("User-Agent cannot be null or empty", nameof(userAgent));
|
||||
}
|
||||
this.userAgent = userAgent;
|
||||
}
|
||||
|
||||
public new ConfigurableHttpClient CreateHttpClient(CreateHttpClientArgs args)
|
||||
{
|
||||
var httpClient = base.CreateHttpClient(args);
|
||||
httpClient.DefaultRequestHeaders.UserAgent.Clear();
|
||||
httpClient.DefaultRequestHeaders.UserAgent.Add(new ProductInfoHeaderValue(userAgent, "1.0"));
|
||||
return httpClient;
|
||||
}
|
||||
}
|
||||
|
||||
public class GoogleBigQueryClientFactory : IGoogleBigQueryClientFactory
|
||||
{
|
||||
private readonly Lazy<BigQueryClient> bigqueryClient;
|
||||
|
||||
public GoogleBigQueryClientFactory(IConfiguration configuration)
|
||||
{
|
||||
bigqueryClient = new Lazy<BigQueryClient>(CreateClient(configuration));
|
||||
}
|
||||
|
||||
public BigQueryClient CreateClient(IConfiguration configuration)
|
||||
{
|
||||
var projectId = configuration.GetValue<string>("BigQuery:ProjectId") ?? throw new Exception("Nie podano identyfikatora projektu Google.");
|
||||
var userAgent = configuration.GetValue<string>("BigQuery:UserAgent") ?? throw new Exception("Nie podano UserAgent.");
|
||||
var credentialFile = configuration.GetValue<string>("GoogleCredentialFile") ?? throw new Exception("Nie podano ścieżki do pliku GoogleCredentials.");
|
||||
|
||||
var credential = GoogleCredential.FromFile(credentialFile);
|
||||
var httpClientFactory = new CustomHttpClientFactory(userAgent);
|
||||
|
||||
return new BigQueryClientBuilder
|
||||
{
|
||||
ProjectId = projectId,
|
||||
Credential = credential,
|
||||
HttpClientFactory = httpClientFactory
|
||||
}.Build();
|
||||
}
|
||||
|
||||
public BigQueryTable GetTable(string datasetId, string tableId)
|
||||
{
|
||||
return bigqueryClient.Value.GetTable(datasetId, tableId);
|
||||
}
|
||||
}
|
||||
|
|
@ -13,6 +13,7 @@
|
|||
},
|
||||
"BigQuery": {
|
||||
"ProjectId": "",
|
||||
"UserAgent": "",
|
||||
"DbName": ""
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue