public static void Run([BlobTrigger("archive/{name}", Connection = "AzureWebJobsStorage")] Stream myBlob, string name, TraceWriter log, ExecutionContext context) { // Only export logs if (!name.EndsWith("v1.data")) { return; } // Deserialize blob log.Info($"Processing blob\n Name:{name} \n Size: {myBlob.Length} Bytes"); var serializer = new JsonSerializer(); using (var sr = new StreamReader(myBlob)) using (var jsonTextReader = new JsonTextReader(sr)) { var logs = serializer.Deserialize <DeviceLog[]>(jsonTextReader); // Filter logs // TODO: Replace with real filter var filteredLogs = logs.Where(l => l.InstallId == "590b1bd0-f75c-4bfe-a006-75d552c9dd37"); // If any logs to export, process logs if (filteredLogs.Any()) { var inputConnectionString = GetConnectionString(context, "InputConnectionString"); var outputConnectionString = GetConnectionString(context, "OutputConnectionString"); var forwarder = new ExportForwarder(inputConnectionString, outputConnectionString, "sample2"); forwarder.ForwardLogs(name, filteredLogs); log.Info($"Exported {filteredLogs.Count()} logs to {name}"); } } }
public static void Main(params string[] args) { if (args.Length != 3) { Console.WriteLine("Usage: sample-console-app.exe <installId> <blob storage connection string where export is pointing to> " + "<blob storage connection string where filtered data will go> <output container name>"); } Console.WriteLine("Forwarding logs:"); var installId = args[0]; var inputConnectionString = args[1]; var outputConnectionString = args[2]; var outputContainerName = args[3]; // Creating forwarder var forwarder = new ExportForwarder( inputConnectionString, outputConnectionString, outputContainerName); forwarder.ParallelOptions = new ParallelOptions { MaxDegreeOfParallelism = 16 }; // Forward all logs from 2018-05-01T22:25:00Z through 2018-05-02T22:26:00Z // Filtered by InstallId "590b1bd0-f75c-4bfe-a006-75d552c9dd37" forwarder.RetrieveAndForwardLogs( DateTimeOffset.UtcNow.AddDays(-30), DateTimeOffset.UtcNow, l => l.InstallId == installId); // Sample: filter by date and event property value // forwarder.RetrieveAndForwardLogs( // new DateTimeOffset(2018, 2, 1, 1, 0, 0, 0, TimeSpan.Zero), // new DateTimeOffset(2018, 2, 2, 1, 0, 0, 0, TimeSpan.Zero), // l => l.MessageType == MessageTypes.EventLog && l.Properties.Contains("*****@*****.**")); Console.WriteLine($"Done"); }