1
0
mirror of https://github.com/bitwarden/server.git synced 2025-06-30 07:36:14 -05:00

port events processor over to webjobs sdk 3

This commit is contained in:
Kyle Spearrin
2019-02-26 11:31:37 -05:00
parent d6eeca3138
commit 0e756208e8
6 changed files with 71 additions and 39 deletions

View File

@ -1,18 +1,26 @@
<Project Sdk="Microsoft.NET.Sdk;Microsoft.NET.Sdk.Publish">
<Project Sdk="Microsoft.NET.Sdk;Microsoft.NET.Sdk.Publish">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net471</TargetFramework>
<TargetFramework>netcoreapp2.1</TargetFramework>
<RootNamespace>Bit.EventsProcessor</RootNamespace>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Azure.WebJobs" Version="2.2.0" />
<PackageReference Include="Microsoft.Azure.WebJobs" Version="3.0.4" />
<PackageReference Include="Microsoft.Azure.WebJobs.Extensions" Version="3.0.1" />
<PackageReference Include="Microsoft.Azure.WebJobs.Extensions.Storage" Version="3.0.3" />
<PackageReference Include="Microsoft.Extensions.Logging.Console" Version="2.2.0" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\Core\Core.csproj" />
</ItemGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Configuration" />
<None Remove="appsettings.json" />
</ItemGroup>
<ItemGroup>
<Content Include="appsettings.json">
<CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
</ItemGroup>
<ItemGroup>
<None Update="Settings.job">

View File

@ -1,13 +1,13 @@
using System;
using System.Collections.Generic;
using System.Configuration;
using System.IO;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using Bit.Core.Models.Data;
using Bit.Core.Services;
using Microsoft.Azure.WebJobs;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
@ -15,22 +15,22 @@ namespace Bit.EventsProcessor
{
public class Functions
{
private static IEventWriteService _eventWriteService;
private readonly IEventWriteService _eventWriteService;
static Functions()
public Functions(IConfiguration config)
{
var storageConnectionString = ConfigurationManager.ConnectionStrings["AzureWebJobsStorage"];
if(storageConnectionString == null || string.IsNullOrWhiteSpace(storageConnectionString.ConnectionString))
var storageConnectionString = config["AzureWebJobsStorage"];
if(string.IsNullOrWhiteSpace(storageConnectionString))
{
return;
}
var repo = new Core.Repositories.TableStorage.EventRepository(storageConnectionString.ConnectionString);
var repo = new Core.Repositories.TableStorage.EventRepository(storageConnectionString);
_eventWriteService = new RepositoryEventWriteService(repo);
}
public async static Task ProcessQueueMessageAsync([QueueTrigger("event")] string message,
TextWriter logger, CancellationToken cancellationToken)
public async Task ProcessQueueMessageAsync([QueueTrigger("event")] string message,
CancellationToken cancellationToken, ILogger logger)
{
if(_eventWriteService == null || message == null || message.Length == 0)
{
@ -39,6 +39,7 @@ namespace Bit.EventsProcessor
try
{
logger.LogInformation("Processing message.");
var events = new List<IEvent>();
var token = JToken.Parse(message);
@ -55,14 +56,20 @@ namespace Bit.EventsProcessor
}
await _eventWriteService.CreateManyAsync(events);
logger.LogInformation("Processed message.");
}
catch(JsonReaderException)
{
await logger.WriteLineAsync("JsonReaderException: Unable to parse message.");
logger.LogError("JsonReaderException: Unable to parse message.");
}
catch(JsonSerializationException)
{
await logger.WriteLineAsync("JsonSerializationException: Unable to serialize token.");
logger.LogError("JsonSerializationException: Unable to serialize token.");
}
catch(Exception e)
{
logger.LogError(e, "Exception occurred. " + e.Message);
throw e;
}
}
}

View File

@ -1,21 +1,40 @@
using Microsoft.Azure.WebJobs;
using System;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
namespace Bit.EventsProcessor
{
public class Program
class Program
{
private static void Main()
static void Main(string[] args)
{
var config = new JobHostConfiguration();
if(config.IsDevelopment)
var builder = new HostBuilder();
builder.ConfigureWebJobs(b =>
{
config.UseDevelopmentSettings();
b.AddAzureStorageCoreServices();
b.AddAzureStorage(a =>
{
a.BatchSize = 5;
});
// Not working. ref: https://github.com/Azure/azure-webjobs-sdk/issues/1962
b.AddDashboardLogging();
});
builder.ConfigureLogging((context, b) =>
{
b.AddConsole();
b.SetMinimumLevel(LogLevel.Warning);
});
builder.ConfigureHostConfiguration(b =>
{
b.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true);
b.AddEnvironmentVariables();
});
var host = builder.Build();
using(host)
{
host.Run();
}
config.Queues.BatchSize = 5;
var host = new JobHost(config);
host.RunAndBlock();
}
}
}

View File

@ -1,5 +0,0 @@
{
"$schema": "http://schemastore.org/schemas/json/webjob-publish-settings.json",
"webJobName": "EventsProcessor",
"runMode": "Continuous"
}

View File

@ -0,0 +1,3 @@
{
"AzureWebJobsStorage": ""
}