Alex Amato created BEAM-6734:
--------------------------------

             Summary: dataflow_metrics_test hard to maintain fake data
                 Key: BEAM-6734
                 URL: https://issues.apache.org/jira/browse/BEAM-6734
             Project: Beam
          Issue Type: New Feature
          Components: java-fn-execution
            Reporter: Alex Amato


 

We have no way to dump and update the metric fake data this test uses. We 
should consider writing a tool to do this properly. We can change the format as 
long as its still human readable.

 

I tried and the following failed:

(1) Using json.dumps on the job_metrics

Fails for not being JSON serializable

(2) Using the proto json_format.py tools to dump on the job_metrics

Fails with exception: object has no attribute 'DESCRIPTOR'

[https://github.com/googleapis/google-cloud-python/issues/3485] 

(2) Using the proto text_format.py tools to dump on the job_metrics

Seemed to dump an empty file?

(3) Using this code to turn any object into a simple JSON style dict and print 
the JSON. This fails because it will print out all the private variables and 
other things we don't want. We could use this approach and whitelist the 
relevant fields.
{code:java}
def _create_simple_obj(self, obj):
  # If its a dictionary or defined class type
  if hasattr(obj, '__dict__') or isinstance(obj, dict):
    items = obj.items() if isinstance(obj, dict) else obj.__dict__.items()
    simple_dict = dict()
    for key, value in items:
      simple_dict[key] = self._create_simple_obj(value)
     return simple_dict
  elif isinstance(obj, (tuple, list, set, frozenset)):
    simple_list = []
    for x in obj:
      simple_list.append(self._create_simple_obj(x))
    return simple_list
  else:
    return obj

def _pretty_format_job_metrics(self, job_metrics):
  job_metrics = self._create_simple_obj(obj)
  return json.dumps(obj, indent=4, sort_keys=True)
{code}
 

 

Or we can just give up and not try to dump new ones, just add some basic tests 
to make sure it can convert the metrics format to MetricResults.

 

Then add more extensive testing on the MetricResults themselves with the 
matchers we are adding.

 

 

 

 



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to