Esempio n. 1
0
    /// <summary>
    ///   Saves the result for the given query to Storage and a local tmp file
    /// </summary>
    async Task<FPath> SaveResult(IDbConnection db, FPath tempDir, ResQuery q) {
      var sw = Stopwatch.StartNew();
      var reader = await ResQuery(db, q);
      var fileName = $"{q.Name}.csv.gz";
      var tempFile = tempDir.Combine(fileName);
      using (var fileWriter = tempFile.Open(FileMode.Create, FileAccess.Write))
        await reader.WriteCsvGz(fileWriter, fileName, Log);

      // save to both latest and the current date 
      await SaveToLatestAndDateDirs(fileName, tempFile);

      Log.Information("Complete saving result {Name} in {Duration}", q.Name, sw.Elapsed);
      return tempFile;
    }
Esempio n. 2
0
 async Task<IDataReader> ResQuery(IDbConnection db, ResQuery q) {
   var query = q.Query ?? $"select * from {q.Name}";
   if (q is FileQuery f) {
     var req = new Uri(ResCfg.FileQueryUri + "/" + f.Path.StringValue).Get()
       .AddHeader("Cache-Control", "no-cache");
     
     var res = await Http.SendAsync(req);
     query = await res.ContentAsString();
   }
   Log.Information("Saving result {Name}: {Query}", q.Name, query);
   try {
     var reader = await db.ExecuteReaderAsync(query, q.Parameters, commandType: CommandType.Text);
     return reader;
   }
   catch (Exception ex) {
     throw new InvalidOperationException($"Error when executing '{q.Name}': {ex.Message}", ex);
   }
 }