public LogAlbS3Event(GetAlbLog getAlbLog, AlbLogToAlteredLog albLogToAlteredLog, LogToElasticsearch logToEs) : base(async(r) => { var albLog = await getAlbLog.Execute(r); var alteredLog = await albLogToAlteredLog.Execute(albLog); var response = await logToEs.Execute(alteredLog); return(response); }) { }
public LogEcsTaskStateChange(LogToElasticsearch logToEs, DescribeTasks describeTasks) : base(r => (from taskStateChange in new[] { r }.ToObservable() let clusterArn = taskStateChange.Detail?.ClusterArn let taskArn = taskStateChange.Detail?.TaskArn where !string.IsNullOrEmpty(clusterArn) && !string.IsNullOrEmpty(taskArn) let describeTasksRequest = new DescribeTasksRequest { Cluster = clusterArn, Tasks = new List <string> { taskArn }, Include = new List <string> { "TAGS" } } from describeTasksResponse in describeTasks.Execute(describeTasksRequest) // lambda will error if this where clause is false where describeTasksResponse.HttpStatusCode.Is2XX() // once c# 8 comes out, switch expressions solve from task in describeTasksResponse.Tasks let tags = task.Tags let app = tags.GetValue("repo") ?? tags.GetValue("Application") ?? tags.GetValue("app") let env = tags.GetValue("env") ?? tags.GetValue("Environment") let sha = tags.GetValue("sha") let log = new { Name = taskStateChange.DetailType, RequestId = taskArn, Message = taskStateChange } let alteredLog = new AlteredLog { Time = taskStateChange.Time, Repo = app, Env = env, Sha = sha, Log = JObject.FromObject(log, AlteredJson.DefaultJsonSerializer) } from response in logToEs.Execute(alteredLog) select response).ToTask()) { }
public LogAutoscalingEvent(IElasticLowLevelClient es, IAmazonAutoScaling asg, LogToElasticsearch logToEs) : base(request => (from asgEvent in Observable.Return(request) let asgName = asgEvent.SelectToken("detail.AutoScalingGroupName")?.Value <string>() where !string.IsNullOrEmpty(asgName) let describeRequest = new DescribeAutoScalingGroupsRequest { AutoScalingGroupNames = new List <string> { asgName } } from describeResponse in asg.DescribeAutoScalingGroupsAsync(describeRequest) from description in describeResponse.AutoScalingGroups let tags = description.Tags let app = tags.GetValue("repo") ?? tags.GetValue("Application") ?? tags.GetValue("app") let env = tags.GetValue("env") ?? tags.GetValue("Environment") let sha = tags.GetValue("sha") let log = new { Name = asgEvent["detail-type"]?.Value <string>(), RequestId = asgName, Message = asgEvent } let time = asgEvent["time"].Value <DateTime>() let alteredLog = new AlteredLog { Time = time, Repo = app, Env = env, Sha = sha, Log = JObject.FromObject(log, AlteredJson.DefaultJsonSerializer) } from response in logToEs.Execute(alteredLog) select response).ToTask()) { }
public LogCodebuildEvent(LogToElasticsearch logToEs, IAmazonCodeBuild cb) : base(request => (from codebuildEvent in Observable.Return(request) let projectName = codebuildEvent.SelectToken("detail.project-name")?.ToObject <string>() where !string.IsNullOrEmpty(projectName) let batchGetProjectsRequest = new BatchGetProjectsRequest { Names = new List <string> { projectName } } from batchGetProjectsResponse in cb.BatchGetProjectsAsync(batchGetProjectsRequest) let time = codebuildEvent["time"].Value <DateTime>() from project in batchGetProjectsResponse.Projects let tags = project.Tags let app = tags.GetValue("repo") ?? tags.GetValue("Application") ?? tags.GetValue("app") let env = tags.GetValue("env") ?? tags.GetValue("Environment") let sha = tags.GetValue("sha") let log = new AlteredLog { Time = time, Repo = app, Env = env, Sha = sha, Log = codebuildEvent } from response in logToEs.Execute(log) select response).ToTask()) { }
public LogCloudwatchLog(LogToElasticsearch logToEs) : base(request => (from e in Observable.Return(request) let logString = e.Awslogs?.DecodeData() //let _ = AlteredConsole.WriteLine(logString) let payload = JObject.Parse(logString) from logEvent in payload["logEvents"] let alteredLog = logEvent["message"]?.Value <string>() let log = AlteredTime(JsonConvert.DeserializeObject <AlteredLog>(alteredLog)) from response in logToEs.Execute(log) select response).ToTask()) { }