Example #1
0
 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())
 {
 }
Example #2
0
 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())
 {
 }
Example #3
0
 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())
 {
 }
Example #4
0
 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 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())
 {
 }