@@ -3,39 +3,59 @@ package ecs
3
3
import (
4
4
"context"
5
5
"fmt"
6
- "log"
7
6
8
7
"github.com/aws/aws-sdk-go-v2/aws"
9
8
"github.com/aws/aws-sdk-go-v2/service/cloudwatchlogs"
10
9
)
11
10
11
+ type printProcessLogsOutput struct {
12
+ lastEventTimestamp int64
13
+ }
14
+
12
15
func (s * Service ) printProcessLogs (
13
16
ctx context.Context , logGroupname string ,
14
17
logStreamPrefix string ,
15
18
taskArn string ,
16
- name string ) error {
17
- log . Printf ( "Loading logs for %s: %s" , logGroupname , taskArn )
19
+ name string ,
20
+ startTime * int64 ) ( printProcessLogsOutput , error ) {
18
21
19
22
cfg , err := s .initCfg ()
20
23
if err != nil {
21
- return fmt .Errorf ("failed to initialize AWS configuration. (%w)" , err )
24
+ return printProcessLogsOutput {}, fmt .Errorf ("failed to initialize AWS configuration. (%w)" , err )
22
25
}
23
26
24
27
processID := extractProcessID (taskArn )
25
28
client := cloudwatchlogs .NewFromConfig (cfg )
26
29
27
- output , err := client . FilterLogEvents ( ctx , & cloudwatchlogs.FilterLogEventsInput {
30
+ input := & cloudwatchlogs.FilterLogEventsInput {
28
31
LogGroupName : aws .String (logGroupname ),
29
32
LogStreamNames : []string {fmt .Sprintf ("%s/%s/%s" , logStreamPrefix , name , processID )},
30
- })
33
+ }
34
+
35
+ if startTime != nil {
36
+ input .StartTime = startTime
37
+ }
38
+
39
+ output , err := client .FilterLogEvents (ctx , input )
31
40
32
41
if err != nil {
33
- return fmt .Errorf ("failed to filter log events (%w)" , err )
42
+ return printProcessLogsOutput {}, fmt .Errorf ("failed to filter log events (%w)" , err )
34
43
}
35
44
36
45
for _ , event := range output .Events {
37
46
fmt .Println (* event .LogStreamName , * event .Message )
38
47
}
39
48
40
- return nil
49
+ var lastEventTimestamp int64
50
+ if len (output .Events ) > 0 {
51
+ lastEventTimestamp = * output .Events [len (output .Events )- 1 ].Timestamp + 1
52
+ } else if startTime != nil {
53
+ lastEventTimestamp = * startTime
54
+ } else {
55
+ lastEventTimestamp = 0
56
+ }
57
+
58
+ return printProcessLogsOutput {
59
+ lastEventTimestamp : lastEventTimestamp ,
60
+ }, nil
41
61
}
0 commit comments