github.com/illyabusigin/fargate@v0.2.4-0.20180913204215-da49df54049c/cloudwatchlogs/log_group.go (about) 1 package cloudwatchlogs 2 3 import ( 4 "fmt" 5 "time" 6 7 "github.com/aws/aws-sdk-go/aws" 8 "github.com/aws/aws-sdk-go/aws/awserr" 9 awscwl "github.com/aws/aws-sdk-go/service/cloudwatchlogs" 10 "github.com/jpignata/fargate/console" 11 ) 12 13 type GetLogsInput struct { 14 Filter string 15 LogGroupName string 16 LogStreamNames []string 17 EndTime time.Time 18 StartTime time.Time 19 } 20 21 type LogLine struct { 22 EventId string 23 LogStreamName string 24 Message string 25 Timestamp time.Time 26 } 27 28 func (cwl *CloudWatchLogs) CreateLogGroup(logGroupName string, a ...interface{}) string { 29 formattedLogGroupName := fmt.Sprintf(logGroupName, a...) 30 _, err := cwl.svc.CreateLogGroup( 31 &awscwl.CreateLogGroupInput{ 32 LogGroupName: aws.String(formattedLogGroupName), 33 }, 34 ) 35 36 if err != nil { 37 if awsErr, ok := err.(awserr.Error); ok { 38 switch awsErr.Code() { 39 case awscwl.ErrCodeResourceAlreadyExistsException: 40 return formattedLogGroupName 41 default: 42 console.ErrorExit(awsErr, "Could not create Cloudwatch Logs log group") 43 } 44 } 45 } 46 47 return formattedLogGroupName 48 } 49 50 func (cwl *CloudWatchLogs) GetLogs(i *GetLogsInput) []LogLine { 51 var logLines []LogLine 52 53 input := &awscwl.FilterLogEventsInput{ 54 LogGroupName: aws.String(i.LogGroupName), 55 Interleaved: aws.Bool(true), 56 } 57 58 if !i.StartTime.IsZero() { 59 input.SetStartTime(i.StartTime.UTC().UnixNano() / int64(time.Millisecond)) 60 } 61 62 if !i.EndTime.IsZero() { 63 input.SetEndTime(i.EndTime.UTC().UnixNano() / int64(time.Millisecond)) 64 } 65 66 if i.Filter != "" { 67 input.SetFilterPattern(i.Filter) 68 } 69 70 if len(i.LogStreamNames) > 0 { 71 input.SetLogStreamNames(aws.StringSlice(i.LogStreamNames)) 72 } 73 74 err := cwl.svc.FilterLogEventsPages( 75 input, 76 func(resp *awscwl.FilterLogEventsOutput, lastPage bool) bool { 77 for _, event := range resp.Events { 78 logLines = append(logLines, 79 LogLine{ 80 EventId: aws.StringValue(event.EventId), 81 Message: aws.StringValue(event.Message), 82 LogStreamName: aws.StringValue(event.LogStreamName), 83 Timestamp: time.Unix(0, aws.Int64Value(event.Timestamp)*int64(time.Millisecond)), 84 }, 85 ) 86 87 } 88 89 return true 90 }, 91 ) 92 93 if err != nil { 94 console.ErrorExit(err, "Could not get logs") 95 } 96 97 return logLines 98 }