mirror of
https://github.com/gosom/google-maps-scraper.git
synced 2026-09-19 07:27:12 +08:00
3b0f0b6b7d
* chore: Uses latest golang version 1.24.3 * chore: Updates dependencies versions * chore: Exits with code 0 when job finish * chore: Updates README to include the required golang version * chore: go mod tidy
85 lines
1.8 KiB
Go
85 lines
1.8 KiB
Go
package main
|
|
|
|
import (
|
|
"context"
|
|
"errors"
|
|
"fmt"
|
|
"log"
|
|
"os"
|
|
"os/signal"
|
|
"syscall"
|
|
|
|
"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"
|
|
"github.com/gosom/google-maps-scraper/runner/lambdaaws"
|
|
"github.com/gosom/google-maps-scraper/runner/webrunner"
|
|
)
|
|
|
|
func main() {
|
|
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()
|
|
}()
|
|
|
|
cfg := runner.ParseConfig()
|
|
|
|
runnerInstance, err := runnerFactory(cfg)
|
|
if err != nil {
|
|
cancel()
|
|
os.Stderr.WriteString(err.Error() + "\n")
|
|
|
|
runner.Telemetry().Close()
|
|
|
|
os.Exit(1)
|
|
}
|
|
|
|
if err := runnerInstance.Run(ctx); err != nil && !errors.Is(err, context.Canceled) {
|
|
os.Stderr.WriteString(err.Error() + "\n")
|
|
|
|
_ = runnerInstance.Close(ctx)
|
|
runner.Telemetry().Close()
|
|
|
|
cancel()
|
|
|
|
os.Exit(1)
|
|
}
|
|
|
|
_ = runnerInstance.Close(ctx)
|
|
runner.Telemetry().Close()
|
|
|
|
cancel()
|
|
|
|
os.Exit(0)
|
|
}
|
|
|
|
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)
|
|
case runner.RunModeWeb:
|
|
return webrunner.New(cfg)
|
|
case runner.RunModeAwsLambda:
|
|
return lambdaaws.New(cfg)
|
|
case runner.RunModeAwsLambdaInvoker:
|
|
return lambdaaws.NewInvoker(cfg)
|
|
default:
|
|
return nil, fmt.Errorf("%w: %d", runner.ErrInvalidRunMode, cfg.RunMode)
|
|
}
|
|
}
|