text: #!/usr/bin/env python
  #
  # Copyright (c) 2014 eNovance
  #
  # Licensed under the Apache License, Version 2.0 (the "License");
  # you may not use this file except in compliance with the License.
  # You may obtain a copy of the License at
  #
  # http://www.apache.org/licenses/LICENSE-2.0
  #
  # Unless required by applicable law or agreed to in writing, software
  # distributed under the License is distributed on an "AS IS" BASIS,
  # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
  # implied.
  # See the License for the specific language governing permissions and
  # limitations under the License.
  
  #
  # Tools to analyse the result of multiple call of duration_perf_test.py:
  #
  #   $ clients=10
  #   $ parallel --progress -j $clients python duration_perf_test.py \
  #       --result myresults/client{} ::: $(seq 0 $clients)
  #   $ python duration_perf_analyse.py myresults
  #    * get_measures:
  #                  Time
  #    count  1000.000000
  #    mean      0.032090
  #    std       0.028287
  #    ...
  #
  
  
  import argparse
  import os
  
  import pandas
  
  
  def main():
      parser = argparse.ArgumentParser()
      parser.add_argument('result',
                          help=('Path of the results of perf_tool.py.'),
                          default='result')
  
      data = {
          'get_measures': [],
          'write_measures': [],
          'write_metric': [],
      }
      args = parser.parse_args()
      for root, dirs, files in os.walk(args.result):
          for name in files:
              for method in data:
                  if name.endswith('_%s.csv' % method):
                      datum = data[method]
                      filepath = os.path.join(root, name)
                      datum.append(pandas.read_csv(filepath))
                      cname = name.replace('_%s.csv' % method, '')
                      datum[-1].rename(columns={'Duration': cname}, inplace=True)
  
      for method in data:
          merged = pandas.DataFrame(columns=['Index', 'Duration'])
          append = pandas.DataFrame(columns=['Duration'])
          for datum in data[method]:
              datum.dropna(axis=1, inplace=True)
              datum.drop('Count', axis=1, inplace=True)
              merged = merged.merge(datum, on='Index')
              cname = datum.columns.values[1]
              datum.rename(columns={cname: 'Duration'}, inplace=True)
              append = append.append(datum.drop('Index', axis=1))
          merged.to_csv(os.path.join(args.result, '%s_merged.csv' % method),
                        index=False)
          print("* %s:" % method)
          print(append.describe())
          print("")
  
  
  if __name__ == '__main__':
      main()
  