(ctx context.Context, clients *awsclients.Clients, functionName string)
| 262 | } |
| 263 | |
| 264 | func getRecentLogs(ctx context.Context, clients *awsclients.Clients, functionName string) ([]LogEntry, error) { |
| 265 | logGroupName := fmt.Sprintf("/aws/lambda/%s", functionName) |
| 266 | |
| 267 | // Get log streams |
| 268 | input := &cloudwatchlogs.DescribeLogStreamsInput{ |
| 269 | LogGroupName: aws.String(logGroupName), |
| 270 | OrderBy: aws.String("LastEventTime"), |
| 271 | Descending: aws.Bool(true), |
| 272 | Limit: aws.Int64(5), |
| 273 | } |
| 274 | |
| 275 | streams, err := clients.CloudWatchLogs.DescribeLogStreamsWithContext(ctx, input) |
| 276 | if err != nil { |
| 277 | return nil, fmt.Errorf("failed to get log streams: %w", err) |
| 278 | } |
| 279 | |
| 280 | var entries []LogEntry |
| 281 | |
| 282 | // Get events from the most recent stream |
| 283 | if len(streams.LogStreams) > 0 { |
| 284 | eventsInput := &cloudwatchlogs.GetLogEventsInput{ |
| 285 | LogGroupName: aws.String(logGroupName), |
| 286 | LogStreamName: streams.LogStreams[0].LogStreamName, |
| 287 | StartFromHead: aws.Bool(false), |
| 288 | Limit: aws.Int64(20), |
| 289 | } |
| 290 | |
| 291 | events, err := clients.CloudWatchLogs.GetLogEventsWithContext(ctx, eventsInput) |
| 292 | if err != nil { |
| 293 | return nil, fmt.Errorf("failed to get log events: %w", err) |
| 294 | } |
| 295 | |
| 296 | for _, event := range events.Events { |
| 297 | if event.Message != nil && event.Timestamp != nil { |
| 298 | timestamp := time.Unix(*event.Timestamp/1000, 0).Format("2006-01-02 15:04:05") |
| 299 | message := strings.TrimSpace(*event.Message) |
| 300 | |
| 301 | // Try to extract log level |
| 302 | level := "" |
| 303 | if strings.Contains(message, "ERROR") { |
| 304 | level = "ERROR" |
| 305 | } else if strings.Contains(message, "WARN") { |
| 306 | level = "WARN" |
| 307 | } else if strings.Contains(message, "INFO") { |
| 308 | level = "INFO" |
| 309 | } else if strings.Contains(message, "DEBUG") { |
| 310 | level = "DEBUG" |
| 311 | } |
| 312 | |
| 313 | entries = append(entries, LogEntry{ |
| 314 | Timestamp: timestamp, |
| 315 | Message: message, |
| 316 | Level: level, |
| 317 | }) |
| 318 | } |
| 319 | } |
| 320 | } |
| 321 |
no test coverage detected