in main/main.go [31:91]
func main() {
logger := slog.New(logging.NewExtensionSlogHandler(os.Stdout, nil)).
With("version", VersionString()).
With("pid", os.Getpid())
// parse command line arguments
cmd := parseCmd(os.Args)
logger = logger.With("operation", strings.ToLower(cmd.name))
// subscribe to cleanly shutdown
sigs := make(chan os.Signal, 1)
signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM)
go func() {
<-sigs
telemetry.SendEvent(telemetry.InfoEvent, telemetry.KillVMWatchTask, "Received shutdown request")
shutdown = true
err := killVMWatch(logger, vmWatchCommand)
if err != nil {
telemetry.SendEvent(telemetry.ErrorEvent, telemetry.KillVMWatchTask, fmt.Sprintf("Error when killing vmwatch process, error: %s", err.Error()))
}
}()
// parse extension environment
hEnv, err := handlerenv.GetHandlerEnviroment()
if err != nil {
logger.Info("failed to parse handlerenv", "error", err)
os.Exit(cmd.failExitCode)
}
seqNum, err := seqnoManager.FindSeqNum(hEnv.ConfigFolder)
if err != nil {
logger.Info("failed to find sequence number", "error", err)
}
logger = logger.With("seq", seqNum)
slog.SetDefault(logger)
// Initialize telemetry singleton, which can be used with package level function
if _, err := telemetry.NewTelemetry(hEnv); err != nil {
logger.Error(fmt.Sprintf("failed to initialize telemetry object, error: %s", err.Error()), slog.Any("error", err))
os.Exit(cmd.failExitCode)
}
// check sub-command preconditions, if any, before executing
telemetry.SendEvent(telemetry.InfoEvent, telemetry.MainTask, fmt.Sprintf("Starting AppHealth Extension %s seqNum=%d operation=%s", GetExtensionVersion(), seqNum, cmd.name))
telemetry.SendEvent(telemetry.InfoEvent, telemetry.MainTask, fmt.Sprintf("HandlerEnviroment = %s", hEnv))
if cmd.pre != nil {
logger.Info("pre-check")
if err := cmd.pre(logger, seqNum); err != nil {
telemetry.SendEvent(telemetry.ErrorEvent, telemetry.MainTask, "pre-check failed", "error", err.Error())
os.Exit(cmd.failExitCode)
}
}
// execute the subcommand
reportStatus(logger, hEnv, seqNum, StatusTransitioning, cmd, "")
msg, err := cmd.f(logger, hEnv, seqNum)
if err != nil {
logger.Error("failed to handle", "error", err)
reportStatus(logger, hEnv, seqNum, StatusError, cmd, err.Error()+msg)
os.Exit(cmd.failExitCode)
}
reportStatus(logger, hEnv, seqNum, StatusSuccess, cmd, msg)
telemetry.SendEvent(telemetry.InfoEvent, telemetry.MainTask, fmt.Sprintf("Finished execution of AppHealth Extension %s seqNum=%d operation=%s", GetExtensionVersion(), seqNum, cmd.name))
}