Skip to content

Instantly share code, notes, and snippets.

@syron
Created December 3, 2018 13:32
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save syron/e0250104f379bdc4ff29bbbec779687c to your computer and use it in GitHub Desktop.
Save syron/e0250104f379bdc4ff29bbbec779687c to your computer and use it in GitHub Desktop.
#r "Newtonsoft.Json"
using System.Net;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Primitives;
using Newtonsoft.Json;
public static async Task<IActionResult> Run(HttpRequest req, ILogger log)
{
log.LogInformation("C# HTTP trigger function processed a request.");
string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
ApiManagementData data = JsonConvert.DeserializeObject<ApiManagementData>(requestBody);
var logStatus = 0;
if (data.StatusCode.HasValue) {
if (data.StatusCode != 200)
logStatus = -1;
}
object contextProperties;
if (data.StatusCode.HasValue) {
contextProperties = new {
ApiManagement_IsRequest = data.IsRequest.ToString(),
ApiManagement_CorrelationId = data.CorrelationId,
ApiManagement_ProductName = data.ProductName,
ApiManagement_ServiceName = data.ServiceName,
ApiManagement_ApiName = data.ApiName,
ApiManagement_ApiPath = data.ApiPath,
ApiManagement_OperationId = data.OperationId,
ApiManagement_OperationName = data.OperationName,
ApiManagement_OperationUrlTemplate = data.OperationUrlTemplate,
ApiManagement_RequestId = data.RequestId,
ApiManagement_RequestOriginalUrl = data.RequestOriginalUrl,
ApiManagement_UserId = data.UserId,
ApiManagement_UserEmail = data.UserEmail,
ApiManagement_SubscriptionId = data.SubscriptionId,
ApiManagement_StatusCode = data.StatusCode.Value.ToString()
};
}
else {
contextProperties = new {
ApiManagement_IsRequest = data.IsRequest.ToString(),
ApiManagement_CorrelationId = data.CorrelationId,
ApiManagement_ProductName = data.ProductName,
ApiManagement_ServiceName = data.ServiceName,
ApiManagement_ApiName = data.ApiName,
ApiManagement_ApiPath = data.ApiPath,
ApiManagement_OperationId = data.OperationId,
ApiManagement_OperationName = data.OperationName,
ApiManagement_OperationUrlTemplate = data.OperationUrlTemplate,
ApiManagement_RequestId = data.RequestId,
ApiManagement_RequestOriginalUrl = data.RequestOriginalUrl,
ApiManagement_UserId = data.UserId,
ApiManagement_UserEmail = data.UserEmail,
ApiManagement_SubscriptionId = data.SubscriptionId,
};
}
var obj = new {
LogAgentValueId = 305,
EndPointName = $"{data.ServiceName}/{data.ApiName}/{data.OperationName}",
EndPointUri = $"{data.ServiceName}/{data.ApiName}/{data.OperationName}",
EndPointDirection = (data.IsRequest) ? 0 : 1,
EndPointTypeId = 88,
OriginalMessageTypeName = (data.IsRequest) ? "Azure.ApiManagement.Request" : "Azure.ApiManagement.Response",
LogDateTime = data.EventTimestamp,
ProcessingUser = "ApiManagementEventHubServiceAccount",
SequenceNo = 0,
EventNumber = 0,
LogText = (data.IsRequest) ? "Request received" : "Response sent",
ApplicationInterchangeId = Guid.Parse(data.CorrelationId).ToString(),
LocalInterchangeId = Guid.Parse(data.CorrelationId),
LogStatus = logStatus,
ProcessName = "ApiManagementEventHubService",
ProcessingMachineName = "Azure",
ProcessingModuleName = "ConvertApiToNodiniteEvent",
ProcessingModuleType = "Azure.Function",
ServiceInstanceActivityId = Guid.Parse(data.CorrelationId),
ProcessingTime = 0,
Context = contextProperties
};
return (ActionResult)new OkObjectResult(obj);
}
public class ApiManagementData {
public bool IsRequest {get;set;}
public string CorrelationId {get;set;}
public DateTime EventTimestamp {get;set;}
public string ServiceName {get;set;}
public string RequestId { get;set;}
public string ApiName {get;set;}
public string ApiPath {get;set;}
public string OperationId {get;set;}
public string OperationName {get;set;}
public string OperationUrlTemplate {get;set;}
public string ProductName {get;set;}
public string RequestOriginalUrl {get;set;}
public string UserId {get;set;}
public string UserEmail {get;set;}
public string SubscriptionId {get;set;}
public int? StatusCode {get;set;}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment