docs: def daily_metadata(year, month, day, dst_folder, writers=[file_writer], geometry_check=None,
                     num_worker_threads=1):
      """ Extra metadata for all products in a specific date """
  
      threaded = False
  
      counter = {
          'products': 0,
          'saved_tiles': 0,
          'skipped_tiles': 0,
          'skipped_tiles_paths': []
      }
  
      if num_worker_threads > 1:
          threaded = True
          queue = Queue()
  
      # create folders
      year_dir = os.path.join(dst_folder, str(year))
      month_dir = os.path.join(year_dir, str(month))
      day_dir = os.path.join(month_dir, str(day))
  
      product_list = get_products_metadata_path(year, month, day)
  
      logger.info('There are %s products in %s-%s-%s' % (len(list(iterkeys(product_list))),
                                                         year, month, day))
  
      for name, product in iteritems(product_list):
          product_dir = os.path.join(day_dir, name)
  
          if threaded:
              queue.put([product, product_dir, counter, writers, geometry_check])
          else:
              counter = product_metadata(product, product_dir, counter, writers, geometry_check)
  
      if threaded:
          def worker():
              while not queue.empty():
                  args = queue.get()
                  try:
                      product_metadata(*args)
                  except Exception:
                      exc = sys.exc_info()
                      logger.error('%s tile skipped due to error: %s' % (threading.current_thread().name,
                                                                         exc[1].__str__()))
                      args[2]['skipped_tiles'] += 1
                  queue.task_done()
  
          threads = []
          for i in range(num_worker_threads):
              t = threading.Thread(target=worker)
              t.start()
              threads.append(t)
  
          queue.join()
  
      return counter