Download recent forecasts with checking local files

This commit is contained in:
Guntis Smaukstelis
2025-02-10 23:43:58 +02:00
parent 63d555bf5b
commit cf69372204
3 changed files with 49 additions and 7 deletions
+25 -3
View File
@@ -87,12 +87,34 @@ class FetchService(log: Logger[IO]) {
gribTime = gribList.head.time
fileName = Path(s"${DataService.FOLDER}/harmonie_${gribTime.referenceTime}_${gribTime.forecastTime}.grib".replace(":", ""))
_ <- Files[IO].move(tmpPath, fileName, CopyFlags.apply(CopyFlag.ReplaceExisting))
_ <- log.info(fileName.toString)
fileNameStr = fileName.toString
} yield fileNameStr
fileSizeBytes <- Files[IO].size(fileName)
fileSizeMB = fileSizeBytes.toDouble / (1024 * 1024)
_ <- log.info(s" ${"%.1f".format(fileSizeMB)} MB - ${fileName.fileName}")
} yield fileName.toString
}
}
/**
* get latest model run from STAC API
* check local forecast grib files not to download them again
* fetch those forecasts
*/
def fetchRecentForecasts(): IO[Unit] = {
for {
dateTimeList <- generateFetchList()
resultList <- fetchFromList(dateTimeList)
} yield ()
}
def generateFetchList(): IO[List[ZonedDateTime]] = {
for {
availableResult <- fetchAvailableForecasts()
(modelRun, forecastDateList) = availableResult
localForecasts <- DataService.getForecasts()
toFetchList = forecastDateList.filter(dateTime => !localForecasts.contains((modelRun, dateTime)))
} yield toFetchList
}
def fetchAvailableForecasts(): IO[(ZonedDateTime, List[ZonedDateTime])] = {
EmberClientBuilder.default[IO].build.use { client =>
for {