Java tutorial
/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you 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. */ package org.apache.brooklyn.test.performance; import java.io.File; import java.io.IOException; import java.text.SimpleDateFormat; import java.util.Date; import org.apache.brooklyn.util.time.Time; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.google.common.annotations.Beta; import com.google.common.base.Charsets; import com.google.common.io.Files; @Beta public class FilePersister implements MeasurementResultPersister { private static final Logger LOG = LoggerFactory.getLogger(PerformanceTestUtils.class); private final File dir; public FilePersister(File dir) { this.dir = dir; } @Override public void persist(Date date, PerformanceTestDescriptor options, PerformanceTestResult result) { try { String dateStr = new SimpleDateFormat(Time.DATE_FORMAT_PREFERRED).format(date); dir.mkdirs(); File file = new File(dir, "auto-test-results.txt"); file.createNewFile(); Files.append("date=" + dateStr + "; test=" + options + "; result=" + result + "\n", file, Charsets.UTF_8); File summaryFile = new File(dir, "auto-test-summary.txt"); summaryFile.createNewFile(); Files.append(dateStr + "\t" + options.summary + "\t" + roundToSignificantFigures(result.ratePerSecond, 6) + "\t" + result.duration + (result.cpuTotalFraction != null ? "\t" + "cpu=" + roundToSignificantFigures(result.cpuTotalFraction, 3) : "") + "\n", summaryFile, Charsets.UTF_8); } catch (IOException e) { LOG.warn("Failed to persist performance results to " + dir + " (continuing)", e); } } // Code copied from http://stackoverflow.com/questions/202302/rounding-to-an-arbitrary-number-of-significant-digits private double roundToSignificantFigures(double num, int n) { if (num == 0) { return 0; } final double d = Math.ceil(Math.log10(num < 0 ? -num : num)); final int power = n - (int) d; final double magnitude = Math.pow(10, power); final long shifted = Math.round(num * magnitude); return shifted / magnitude; } }