2023-04-22 17:37:57 +03:00
|
|
|
package main
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"context"
|
2025-05-10 09:06:07 +03:00
|
|
|
"errors"
|
2024-09-28 08:49:48 +03:00
|
|
|
"fmt"
|
2024-10-16 18:55:49 +03:00
|
|
|
"log"
|
2023-04-22 17:37:57 +03:00
|
|
|
"os"
|
2024-10-16 18:55:49 +03:00
|
|
|
"os/signal"
|
|
|
|
|
"syscall"
|
2023-04-22 17:37:57 +03:00
|
|
|
|
2024-10-12 15:05:35 +03:00
|
|
|
"github.com/gosom/google-maps-scraper/runner"
|
|
|
|
|
"github.com/gosom/google-maps-scraper/runner/databaserunner"
|
|
|
|
|
"github.com/gosom/google-maps-scraper/runner/filerunner"
|
|
|
|
|
"github.com/gosom/google-maps-scraper/runner/installplaywright"
|
2024-11-03 15:31:57 +02:00
|
|
|
"github.com/gosom/google-maps-scraper/runner/lambdaaws"
|
2024-10-16 18:55:49 +03:00
|
|
|
"github.com/gosom/google-maps-scraper/runner/webrunner"
|
2023-04-22 17:37:57 +03:00
|
|
|
)
|
|
|
|
|
|
|
|
|
|
func main() {
|
2024-10-16 18:55:49 +03:00
|
|
|
ctx, cancel := context.WithCancel(context.Background())
|
|
|
|
|
|
|
|
|
|
runner.Banner()
|
|
|
|
|
|
|
|
|
|
sigChan := make(chan os.Signal, 1)
|
|
|
|
|
signal.Notify(sigChan, os.Interrupt, syscall.SIGTERM)
|
|
|
|
|
|
|
|
|
|
go func() {
|
|
|
|
|
<-sigChan
|
|
|
|
|
|
|
|
|
|
log.Println("Received signal, shutting down...")
|
|
|
|
|
|
|
|
|
|
cancel()
|
|
|
|
|
}()
|
|
|
|
|
|
2024-10-12 15:05:35 +03:00
|
|
|
cfg := runner.ParseConfig()
|
2023-05-13 17:08:42 +03:00
|
|
|
|
2024-10-12 15:05:35 +03:00
|
|
|
runnerInstance, err := runnerFactory(cfg)
|
2023-05-14 15:01:48 +03:00
|
|
|
if err != nil {
|
2024-10-16 18:55:49 +03:00
|
|
|
cancel()
|
2024-10-12 15:05:35 +03:00
|
|
|
os.Stderr.WriteString(err.Error() + "\n")
|
2023-05-14 15:01:48 +03:00
|
|
|
|
2024-10-13 17:38:14 +03:00
|
|
|
runner.Telemetry().Close()
|
|
|
|
|
|
2024-10-12 15:05:35 +03:00
|
|
|
os.Exit(1)
|
2023-05-14 15:01:48 +03:00
|
|
|
}
|
|
|
|
|
|
2025-05-10 09:06:07 +03:00
|
|
|
if err := runnerInstance.Run(ctx); err != nil && !errors.Is(err, context.Canceled) {
|
2024-10-12 15:05:35 +03:00
|
|
|
os.Stderr.WriteString(err.Error() + "\n")
|
2023-05-07 09:31:41 +03:00
|
|
|
|
2024-10-12 15:05:35 +03:00
|
|
|
_ = runnerInstance.Close(ctx)
|
2024-10-13 17:38:14 +03:00
|
|
|
runner.Telemetry().Close()
|
2023-05-07 09:31:41 +03:00
|
|
|
|
2024-10-16 18:55:49 +03:00
|
|
|
cancel()
|
|
|
|
|
|
2024-10-12 15:05:35 +03:00
|
|
|
os.Exit(1)
|
2023-04-22 17:37:57 +03:00
|
|
|
}
|
2023-05-07 09:31:41 +03:00
|
|
|
|
2024-10-12 15:05:35 +03:00
|
|
|
_ = runnerInstance.Close(ctx)
|
2024-10-13 17:38:14 +03:00
|
|
|
runner.Telemetry().Close()
|
2023-04-22 17:37:57 +03:00
|
|
|
|
2024-10-16 18:55:49 +03:00
|
|
|
cancel()
|
|
|
|
|
|
2024-10-12 15:05:35 +03:00
|
|
|
os.Exit(0)
|
2023-05-14 15:01:48 +03:00
|
|
|
}
|
|
|
|
|
|
2024-10-12 15:05:35 +03:00
|
|
|
func runnerFactory(cfg *runner.Config) (runner.Runner, error) {
|
|
|
|
|
switch cfg.RunMode {
|
|
|
|
|
case runner.RunModeFile:
|
|
|
|
|
return filerunner.New(cfg)
|
|
|
|
|
case runner.RunModeDatabase, runner.RunModeDatabaseProduce:
|
|
|
|
|
return databaserunner.New(cfg)
|
|
|
|
|
case runner.RunModeInstallPlaywright:
|
|
|
|
|
return installplaywright.New(cfg)
|
2024-10-16 18:55:49 +03:00
|
|
|
case runner.RunModeWeb:
|
|
|
|
|
return webrunner.New(cfg)
|
2024-11-03 15:31:57 +02:00
|
|
|
case runner.RunModeAwsLambda:
|
|
|
|
|
return lambdaaws.New(cfg)
|
|
|
|
|
case runner.RunModeAwsLambdaInvoker:
|
|
|
|
|
return lambdaaws.NewInvoker(cfg)
|
2023-05-14 15:01:48 +03:00
|
|
|
default:
|
2024-10-12 15:05:35 +03:00
|
|
|
return nil, fmt.Errorf("%w: %d", runner.ErrInvalidRunMode, cfg.RunMode)
|
2023-04-22 17:37:57 +03:00
|
|
|
}
|
2024-09-28 08:49:48 +03:00
|
|
|
}
|