code: def log_metrics(self, metrics_by_name, info):
          
          try:
              metrics_path = os.path.join(self.dir, "metrics.json")
              with open(metrics_path, 'r') as f:
                  saved_metrics = json.load(f)
          except IOError:
              # We haven't recorded anything yet. Start Collecting.
              saved_metrics = {}
  
          for metric_name, metric_ptr in metrics_by_name.items():
  
              if metric_name not in saved_metrics:
                  saved_metrics[metric_name] = {"values": [],
                                                "steps": [],
                                                "timestamps": []}
  
              saved_metrics[metric_name]["values"] += metric_ptr["values"]
              saved_metrics[metric_name]["steps"] += metric_ptr["steps"]
  
              # Manually convert them to avoid passing a datetime dtype handler
              # when we're trying to convert into json.
              timestamps_norm = [ts.isoformat()
                                 for ts in metric_ptr["timestamps"]]
              saved_metrics[metric_name]["timestamps"] += timestamps_norm
  
          self.save_json(saved_metrics, 'metrics.json')
docs: Store new measurements into metrics.json.