MCPcopy Create free account
hub / github.com/aws-samples/aws-lambda-extensions / main

Function main

go-example-adaptive-batching-extension/main.go:23–139  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

21const INITIAL_QUEUE_SIZE = 5
22
23func main() {
24
25 extensionName := path.Base(os.Args[0])
26 printPrefix := fmt.Sprintf("[%s]", extensionName)
27 logger := log.WithFields(log.Fields{"agent": extensionName})
28
29 extensionClient := extension.NewClient(os.Getenv("AWS_LAMBDA_RUNTIME_API"))
30
31 ctx, cancel := context.WithCancel(context.Background())
32
33 sigs := make(chan os.Signal, 1)
34 signal.Notify(sigs, syscall.SIGTERM, syscall.SIGINT)
35 go func() {
36 s := <-sigs
37 cancel()
38 logger.Info(printPrefix, "Received", s)
39 logger.Info(printPrefix, "Exiting")
40 }()
41
42 // Register extension as soon as possible
43 _, err := extensionClient.Register(ctx, extensionName)
44 if err != nil {
45 panic(err)
46 }
47
48 // Create S3 Logger
49 logsApiLogger, err := agent.NewS3Logger()
50 if err != nil {
51 logger.Fatal(err)
52 }
53
54 // A synchronous queue that is used to put logs from the goroutine (producer)
55 // and process the logs from main goroutine (consumer)
56 logQueue := queuewrapper.New(INITIAL_QUEUE_SIZE)
57
58 // Helper function to empty the log queue
59 flushLogQueue := func() {
60 logger.Info(printPrefix, "Flush Queue")
61 for !logQueue.Empty() {
62 logs, err := logQueue.Get(1)
63 if err != nil {
64 logger.Error(printPrefix, err)
65 return
66 }
67 logString := fmt.Sprintf("%v", logs[0])
68 // write log to logger
69 logsApiLogger.WriteLog(logString)
70 }
71 }
72
73 // Create Logs API agent
74 logsApiAgent, err := agent.NewHttpAgent(logsApiLogger, logQueue)
75 if err != nil {
76 logger.Fatal(err)
77 }
78
79 // Subscribe to logs API
80 // Logs start being delivered only after the subscription happens.

Callers

nothing calls this directly

Calls 12

RegisterMethod · 0.95
WriteLogMethod · 0.95
InitMethod · 0.95
NextEventMethod · 0.95
ShutdownMethod · 0.95
CountInvokeMethod · 0.95
ShouldShipMethod · 0.95
StringMethod · 0.95
FlushLogMethod · 0.95
ResetMethod · 0.95
EmptyMethod · 0.80
GetMethod · 0.80

Tested by

no test coverage detected