package util import ( commonCmd "git.frostfs.info/TrueCloudLab/frostfs-node/cmd/internal/common" locodedb "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/util/locode/db" airportsdb "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/util/locode/db/airports" locodebolt "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/util/locode/db/boltdb" continentsdb "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/util/locode/db/continents/geojson" csvlocode "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/util/locode/table/csv" "github.com/spf13/cobra" ) type namesDB struct { *airportsdb.DB *csvlocode.Table } const ( locodeGenerateInputFlag = "in" locodeGenerateSubDivFlag = "subdiv" locodeGenerateAirportsFlag = "airports" locodeGenerateCountriesFlag = "countries" locodeGenerateContinentsFlag = "continents" locodeGenerateOutputFlag = "out" ) var ( locodeGenerateInPaths []string locodeGenerateSubDivPath string locodeGenerateAirportsPath string locodeGenerateCountriesPath string locodeGenerateContinentsPath string locodeGenerateOutPath string locodeGenerateCmd = &cobra.Command{ Use: "generate", Short: "Generate UN/LOCODE database for FrostFS", Run: func(cmd *cobra.Command, _ []string) { locodeDB := csvlocode.New( csvlocode.Prm{ Path: locodeGenerateInPaths[0], SubDivPath: locodeGenerateSubDivPath, }, csvlocode.WithExtraPaths(locodeGenerateInPaths[1:]...), ) airportDB := airportsdb.New(airportsdb.Prm{ AirportsPath: locodeGenerateAirportsPath, CountriesPath: locodeGenerateCountriesPath, }) continentsDB := continentsdb.New(continentsdb.Prm{ Path: locodeGenerateContinentsPath, }) targetDB := locodebolt.New(locodebolt.Prm{ Path: locodeGenerateOutPath, }) err := targetDB.Open() commonCmd.ExitOnErr(cmd, "", err) defer targetDB.Close() names := &namesDB{ DB: airportDB, Table: locodeDB, } err = locodedb.FillDatabase(locodeDB, airportDB, continentsDB, names, targetDB) commonCmd.ExitOnErr(cmd, "", err) }, } ) func initUtilLocodeGenerateCmd() { flags := locodeGenerateCmd.Flags() flags.StringSliceVar(&locodeGenerateInPaths, locodeGenerateInputFlag, nil, "List of paths to UN/LOCODE tables (csv)") _ = locodeGenerateCmd.MarkFlagRequired(locodeGenerateInputFlag) flags.StringVar(&locodeGenerateSubDivPath, locodeGenerateSubDivFlag, "", "Path to UN/LOCODE subdivision database (csv)") _ = locodeGenerateCmd.MarkFlagRequired(locodeGenerateSubDivFlag) flags.StringVar(&locodeGenerateAirportsPath, locodeGenerateAirportsFlag, "", "Path to OpenFlights airport database (csv)") _ = locodeGenerateCmd.MarkFlagRequired(locodeGenerateAirportsFlag) flags.StringVar(&locodeGenerateCountriesPath, locodeGenerateCountriesFlag, "", "Path to OpenFlights country database (csv)") _ = locodeGenerateCmd.MarkFlagRequired(locodeGenerateCountriesFlag) flags.StringVar(&locodeGenerateContinentsPath, locodeGenerateContinentsFlag, "", "Path to continent polygons (GeoJSON)") _ = locodeGenerateCmd.MarkFlagRequired(locodeGenerateContinentsFlag) flags.StringVar(&locodeGenerateOutPath, locodeGenerateOutputFlag, "", "Target path for generated database") _ = locodeGenerateCmd.MarkFlagRequired(locodeGenerateOutputFlag) }