deb-gnocchi/tools/duration_perf_analyse.py

80 lines
2.5 KiB
Python

#!/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()