in granule_ingester/granule_ingester/writers/ElasticsearchStore.py [0:0]
def build_es_doc(self, tile: NexusTile) -> Dict:
summary: TileSummary = tile.summary
bbox: TileSummary.BBox = summary.bbox
stats: TileSummary.DataStats = summary.stats
min_time = datetime.strftime(datetime.utcfromtimestamp(stats.min_time), self.iso)
max_time = datetime.strftime(datetime.utcfromtimestamp(stats.max_time), self.iso)
day_of_year = datetime.utcfromtimestamp(stats.min_time).timetuple().tm_yday
geo = self.determine_geo(bbox)
granule_file_name: str = Path(summary.granule).name # get base filename
tile_type = tile.tile.WhichOneof("tile_type")
tile_data = getattr(tile.tile, tile_type)
var_name = summary.standard_name if summary.standard_name else summary.data_var_name
input_document = {
'table_s': self.TABLE_NAME,
'geo': geo,
'id': summary.tile_id,
'solr_id_s': '{ds_name}!{tile_id}'.format(ds_name=summary.dataset_name, tile_id=summary.tile_id),
'sectionSpec_s': summary.section_spec,
'dataset_s': summary.dataset_name,
'granule_s': granule_file_name,
'tile_var_name_s': var_name,
'day_of_year_i': day_of_year,
'tile_min_lon': round(bbox.lon_min, 3),
'tile_max_lon': round(bbox.lon_max, 3),
'tile_min_lat': round(bbox.lat_min, 3),
'tile_max_lat': round(bbox.lat_max, 3),
'tile_depth': tile_data.depth,
'tile_min_time_dt': min_time,
'tile_max_time_dt': max_time,
'tile_min_val_d': stats.min,
'tile_max_val_d': stats.max,
'tile_avg_val_d': stats.mean,
'tile_count_i': int(stats.count)
}
ecco_tile_id = getattr(tile_data, 'tile', None)
if ecco_tile_id:
input_document['ecco_tile'] = ecco_tile_id
for attribute in summary.global_attributes:
input_document[attribute.getName()] = attribute.getValues(
0) if attribute.getValuesCount() == 1 else attribute.getValuesList()
return input_document